社交网络上的活动/新闻源的SQL查询复杂性

时间:2013-05-11 13:18:54

标签: mysql

我目前正在学习各种不同的东西,所以要做到这一点我目前正在建立一个小社交网站并且它到达那里。我还有几件事要做,其中一件是活动/新闻提要,或者你想要称之为什么。它足够简单,可以在您的个人资料Feed中显示您自己的帖子。但在索引页面上,它将是你自己的帖子加上你朋友的帖子,这就是我所挣扎的。首先,我有friends的表格,其中包含user_one列& user_two如果您的朋友在其中一个,而另一个用户在另一个用户中,那么您的朋友就好了。我最初尝试拉取几个不同用户发布的帖子的查询是

SELECT * FROM `post`, `friends` WHERE `user_id` = $user_id AND (`friends`.`user_one` = $user_id OR `friends`.`user_two` = $user_id)

从它应该,选择帖子user_id = $ _SESSION ['user_id']的帖子和朋友和朋友表中的user_one OR user_two = $ _SESSION ['user_id']。这应该得到与$ _SESSION ['user_id']在同一行(在friends表中)的OTHER user_id所发布的任何帖子......

但问题是正在发生的事情是它提升了一个结果,而不是像我希望的那样只是一个帖子,它拉起重复。我认为这是因为它提升了双倍的结果,因为它喜欢..say即用户1 ..而用户2和3是我的朋友,它为用户2&提取了一个结果。用户3的一个结果......

我想要的只是提取一个结果显示在我和我的“朋友”发布的用户1的活动源上...有人可以告诉我如何最好地执行此操作吗?如果有人能理解我大声笑......

欢呼声

理查德

1 个答案:

答案 0 :(得分:0)

你没有加入这两个表,这就是你得到重复的原因。

我会按如下方式编写此查询:

SELECT * 
FROM `post`
WHERE EXISTS (SELECT * FROM `friends` 
               WHERE (`friends`.`user_one` = $user_id AND `post`.`user_id` = `friends`.`user_two`)
                OR   (`friends`.`user_two` = $user_id AND `post`.`user_id` = `friends`.`user_one`)
              )