MySQL在这里:http://sqlfiddle.com/#!2/12213/16
我正在尝试使用三张桌子。
表1:users
表(存储数据库中每个用户的数据)
表2:users_fav
表(存储将另一个用户添加为收藏的每个用户的数据)
表3:users_rated
表(存储已评定其他用户的每个用户的数据)
users_fav
和users_rated
存储users.uid
或users_fav.uid
列中正在评分或淡入淡出的users_rated.uid
以及他们要添加到的用户{ {1}}或users_fav.matchuid
。
我想要的最终结果:
我需要从用户表中提取未被指定用户评级或收藏的所有用户。在sql小提琴数据中,用户尝试提取结果的是用户ID 1,其他几个用户已经过评级和保存用于测试目的。
我已经构建了连接并尝试了一些但却无法得到我想要的结果。这是我尝试过的(请参考上面发布的小提琴中的数据和评论)。应该假设用户ID 1试图拉动用户1尚未被收藏或评级的所有用户:
users_rated.matchuid
这显示没有任何结果。我已尝试加入#attempt one shows no results
SELECT users.uid, users.gender, users.username
FROM users
LEFT JOIN users_fav
ON users.uid=users_fav.matchuid
LEFT JOIN users_rated
ON users.uid=users_rated.matchuid
WHERE users.uid > 0
AND users.gender = 0
AND users_fav.uid <> 1
AND users_rated.uid <> 1
ORDER BY users.uid ASC;
以及users_fav
上的users_rated
和uid
表格。
matchuid
我尝试使用连接进行排除的第二个查询。它似乎忽略了这一点并返回了7个用户中的6个,只排除了性别为1的用户1,该用户1在查询中被排除。
感谢任何指导。
感谢。
答案 0 :(得分:1)
可以工作......
SELECT users.uid, users.gender, users.username
FROM users
LEFT JOIN users_fav ON users.uid=users_fav.matchuid AND users_fav.uid = 1
LEFT JOIN users_rated ON users.uid=users_rated.matchuid AND users_rated.uid = 1
WHERE users_fav.uid IS NULL AND users_rated.uid IS NULL
这会给你所有没有评价且没有被评价的人(最终你想要OR?)
答案 1 :(得分:0)
将为您提供未被评级且受到UID = 1青睐的所有用户的结果。出于某种原因,这个小提琴不会显示NULL
值,您将其与{{1 }}。从来没有注意到正常的sql,所以没有线索,如果这是预期的:S
!= 1