SQL で自分の ID を除外したいとき

Dec 1st, 2022 sql

状況

データベースからユーザを検索したいが,ログインしているユーザ(自分)も検索結果に出てきてスマートではなかった.

テーブルはこんな感じ.今回は 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