我正在创建一个表格,显示当前用户尚未订阅的所有注册用户。但是一旦他订阅了某人,我就需要过滤该列表以排除这些。
假设有一个名为已订阅的表格,其中列出了用户以及他订阅的用户。
|UserId||SubscriberID|
很容易将它变成多个查询,但是我一直试图将它变成一个查询,以节省额外的MySQL调用循环。
这是我到目前为止所拥有的:
SELECT u.UserID, FullName, UserName from users u
LEFT JOIN subscribed t ON
((u.UserName LIKE '%$search%' OR
u.Email LIKE '%$search%') AND
({$_SESSION['ID']} = t.UserID
AND t.FollowerID != u.UserID)
)
我知道查询的最后一部分是错误的,因为我只比较UserID和FollowerID是否与一个特定行不匹配,而不是整个表。
答案 0 :(得分:0)
要查找表A中不在表B中的结果列表,您有两个选项。使用NOT IN
语法或LEFT JOIN
并查看B表中PK字段的位置NULL
。
NOT IN
示例:
SELECT a.id FROM a WHERE a.id NOT IN (SELECT b.id FROM b)
LEFT JOIN
示例:
SELECT a.id
FROM a
LEFT JOIN b ON (a.id = b.id)
WHERE (b.id IS NULL)