状況
データベースからユーザを検索したいが,ログインしているユーザ(自分)も検索結果に出てきてスマートではなかった.
テーブルはこんな感じ.今回は users
テーブルを作成した.
> desc users;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(12) | NO | PRI | NULL | auto_increment |
| name | varchar(128) | NO | | NULL | |
| email | varchar(128) | NO | | NULL | |
| password | varchar(128) | NO | | NULL | |
| created_at | datetime | NO | | NULL | |
| updated_at | datetime | NO | | NULL | |
+------------+--------------+------+-----+---------+----------------+
> select * from users;
+----+------+--------------+----------+---------------------+---------------------+
| id | name | email | password | created_at | updated_at |
+----+------+--------------+----------+---------------------+---------------------+
| 1 | aaa | aaa@hoge.com | hogeaaa | 2019-06-27 12:42:44 | 2019-06-27 12:42:44 |
| 2 | bbb | bbb@hoge.com | hogebbb | 2019-06-27 12:43:07 | 2019-06-27 12:43:07 |
| 3 | ccc | ccc@hoge.com | hogeccc | 2019-06-27 12:43:17 | 2019-06-27 12:43:17 |
| 4 | ddd | ddd@hoge.com | hogeddd | 2019-06-27 12:43:31 | 2019-06-27 12:43:31 |
+----+------+--------------+----------+---------------------+---------------------+
4 rows in set (0.000 sec)
例えば...
id が 3 以下のユーザを表示したいときは以下のようになる.
> select * from users where id<4;
+----+------+--------------+----------+---------------------+---------------------+
| id | name | email | password | created_at | updated_at |
+----+------+--------------+----------+---------------------+---------------------+
| 1 | aaa | aaa@hoge.com | hogeaaa | 2019-06-27 12:42:44 | 2019-06-27 12:42:44 |
| 2 | bbb | bbb@hoge.com | hogebbb | 2019-06-27 12:43:07 | 2019-06-27 12:43:07 |
| 3 | ccc | ccc@hoge.com | hogeccc | 2019-06-27 12:43:17 | 2019-06-27 12:43:17 |
+----+------+--------------+----------+---------------------+---------------------+
3 rows in set (0.002 sec)
このとき,例えば aaa
のユーザがログインしており,aaa
は除外したい場合があったがちょっとハマった.
解決策
ただログインしているユーザの id を除外すればよかった.
> select * from users where id<4 and id!=1;
+----+------+--------------+----------+---------------------+---------------------+
| id | name | email | password | created_at | updated_at |
+----+------+--------------+----------+---------------------+---------------------+
| 2 | bbb | bbb@hoge.com | hogebbb | 2019-06-27 12:43:07 | 2019-06-27 12:43:07 |
| 3 | ccc | ccc@hoge.com | hogeccc | 2019-06-27 12:43:17 | 2019-06-27 12:43:17 |
+----+------+--------------+----------+---------------------+---------------------+
2 rows in set (0.002 sec)
アプリケーション側から実行する場合は,id!=1
の部分をログインユーザの id を取得してきて置き換えてあげればOK!
以上だ( `・ω・)b