【发布时间】:2015-04-26 09:33:44
【问题描述】:
我正在制作一个自定义白名单,其中我的主表是 book_list,包含 id - 主键和其他不重要的列。另一个表是白名单,其中包含来自 book_list 的外键和另一个键是 user_id。
book_list 表
--------------
| id |
---------------
| 10 |
| 11 |
| 12 |
| 13 |
---------------
白名单表
---------------------------
| book_list_id | user_id |
----------------------------
| 10 | 1 |
| 10 | 2 |
----------------------------
所以当 user_id 1 正在浏览时,他/她应该看到所有的书 (10, 11, 12, 13),但是如果 id 5 的用户查看他应该只看到 book_list ids (11, 12, 13)
我的查询是这样的,但如果每个 book_id 只有一个 id 可用,它就可以工作。
SELECT * FROM book_list bl
LEFT JOIN whitelist w ON bl.id = w.book_list_id AND w.user_id <> 1
WHERE w.book_list_id IS NULL
注意:我总是从会话中获得 user_id,这就是为什么它是硬编码的。
【问题讨论】:
-
我认为您需要某种子查询来检查
user_id是否存在于该W.book_list_id。