次のような 2 つのテーブルがあります。
logbook:
+------------+-------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| date_added | timestamp | NO | | CURRENT_TIMESTAMP | |
| username | varchar(16) | NO | | NULL | |
| entry | longtext | NO | MUL | NULL | |
+------------+-------------+------+-----+-------------------+----------------+
と
read_logbook:
+------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| logbook_id | int(11) | NO | | NULL | |
| username | varchar(16) | NO | | NULL | |
+------------+-------------+------+-----+---------+----------------+
私がやりたいのは、 からすべてを選択することですが、 ANDがおよびにそれぞれ表示されlogbook
ない場合に限ります。logbook.id
logbook.username
read_logbook.logbook_id
read_logbook.username
いくつかの左結合右クエリといくつかのnot in
クエリを試してみましたが、予想よりも数千の結果が得られるか、まったく結果が得られません。
何かご意見は?
編集-特定のユーザー名に対してこれを実行します...したがって、基本的に、私のユーザー名が である場合、! =および!=jmd9qs
からのすべての結果が必要ですlogbook
read_logbook.id
logbook.id
read_logbook.username
jmd9qs
それが十分に明確であることを願っています...
編集 - テストデータ
日誌:
mysql> select id, date_added, username from logbook order by id desc limit 10;
+----+---------------------+-----------+
| id | date_added | username |
+----+---------------------+-----------+
| 94 | 2013-09-03 14:54:25 | tluce |
| 93 | 2013-09-03 13:12:02 | tluce |
| 92 | 2013-09-03 11:42:14 | tluce |
| 91 | 2013-09-03 08:28:20 | jmd9qs |
| 90 | 2013-09-03 07:13:36 | jmd9qs |
| 89 | 2013-09-03 07:05:19 | jmd9qs |
| 88 | 2013-09-03 06:57:47 | jsawtelle |
| 87 | 2013-09-03 06:15:42 | jsawtelle |
| 86 | 2013-09-03 05:21:14 | jsawtelle |
| 85 | 2013-09-03 03:52:25 | jsawtelle |
+----+---------------------+-----------+
既読として「マーク」されたログブック エントリ:
mysql> select logbook_id, username from read_logbook group by logbook_id desc limit 10;
+------------+----------+
| logbook_id | username |
+------------+----------+
| 94 | jmd9qs |
| 93 | jmd9qs |
| 92 | jmd9qs |
| 91 | jmd9qs |
| 90 | jmd9qs |
| 89 | jmd9qs |
| 88 | jmd9qs |
| 87 | jmd9qs |
| 86 | jmd9qs |
| 85 | jmd9qs |
+------------+----------+
10 rows in set (0.00 sec)
そのため、 のクエリを実行してjmd9qs
も何もread_logbook
表示されないはずです。
説明 -
したがって、ログブックでは、ユーザー名は単に書いた人ですlogbook.entry
. ではread_logbook
、username はそのエントリを読んだ人です。したがって、 としてログインしjmd9qs
、ログブックを表示しようとすると、すべてを読んだので、 nologbook.entry
が表示されるはずです。しかし、その特定のエントリを読んでいない別のユーザーには、そのエントリが表示されるはずです。