如何在排除某些结果的同时加入多个MySQL查询?

时间:2013-12-11 07:59:37

标签: php mysql sql join

MySQL在这里:http://sqlfiddle.com/#!2/12213/16

我正在尝试使用三张桌子。

表1:users表(存储数据库中每个用户的数据)
表2:users_fav表(存储将另一个用户添加为收藏的每个用户的数据)
表3:users_rated表(存储已评定其他用户的每个用户的数据)

users_favusers_rated存储users.uidusers_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_rateduid表格。

matchuid

我尝试使用连接进行排除的第二个查询。它似乎忽略了这一点并返回了7个用户中的6个,只排除了性别为1的用户1,该用户1在查询中被排除。

感谢任何指导。

感谢。

2 个答案:

答案 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

http://sqlfiddle.com/#!2/12213/65