PrismaCode

Notes on programming.

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

27 June, 2019

作成日:2019/06/27

更新日:2019/06/27

sqlの備忘録的なやつ.

状況

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

テーブルはこんな感じ.今回はusersテーブルを作成した.

MariaDB [mydb]> 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    |                |
+------------+--------------+------+-----+---------+----------------+
MariaDB [mydb]> 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以下のユーザを表示したいときは以下のようになる.

MariaDB [mydb]> 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を除外すればよかった.

MariaDB [mydb]> 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)

phpで実行する場合は,id!=1の部分をログインユーザのidを取得してきて置き換えてあげればOK!

以上だ( `・ω・)b

#sql