查询以显示所有数据,除非与用户相关

时间:2013-04-25 19:56:20

标签: mysql sql

我有这个查询,它完全符合我的要求。基本上,想想Twitter。你不希望你的主屏幕充满了任何人从最近开始的每一条推文。你只想要你的朋友。这就是它的作用。

profile_follows是建立连接的表。 user_id是你,follow_id是你所关注的人的user_id

SELECT b.item, b.item_id, a.review_id, a.review, c.category, u.username, c.cat_id 
FROM reviews a
INNER JOIN items b
     ON a.item_id = b.item_id
INNER JOIN master_cat c
     ON c.cat_id = b.cat_id
INNER JOIN profile_follow pf
     ON pf.follow_id = a.user_id
INNER JOIN users u
     ON u.user_id = a.user_id
WHERE pf.user_id = '{$user_id}'
ORDER BY a.review_id DESC;

这是一个问题:我怎样才能达到完全相反的目的?它显示了每个人最近的活动除了你跟随的人之外?

我尝试了各种组合'ON pf.follow_id<> a.user_id',但这不起作用。还有其他想法吗?

总结一下,它应该选择所有a.user_id,除非所有a.user_id = follow_id与{$ user_id}匹配(通过php传入)。

2 个答案:

答案 0 :(得分:1)

SELECT b.item, b.item_id, a.review_id, a.review, c.category, u.username, c.cat_id 
FROM reviews a
INNER JOIN items b
     ON a.item_id = b.item_id
INNER JOIN master_cat c
     ON c.cat_id = b.cat_id
INNER JOIN users u
     ON u.user_id = a.user_id
WHERE NOT EXISTS(SELECT 1 FROM profile_follow WHERE user_id = '{$user_id}' AND follow_id = a.user_id)
ORDER BY a.review_id DESC;

答案 1 :(得分:0)

更改

WHERE pf.user_id = '{$user_id}'

WHERE pf.user_id != '{$user_id}'

WHERE NOT pf.user_id = '{$user_id}'

WHERE pf.user_id NOT IN ('{$user_id}')