2013-04-25 73 views
1

我有这个查询,这正是我想要的。基本上,想想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匹配)S(经由php传递)。

回答

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; 
+0

完美,谢谢! – KickingLettuce 2013-04-25 20:20:28

+0

@KickingLettuce没问题:) – Aushin 2013-04-25 20:21:50

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}') 
相关问题