显示“订阅者”帖子和用户自己的帖子

时间:2011-12-21 01:54:19

标签: php mysql sql posts

这让我困扰了一段时间。

我的问题: 我有2个不同的表..用户帖子表和订阅者表。

订阅者表如下所示:

SubscriberID - > ProfileID
1 - > 2
1 - > 3
2 - > 3
2 - > 4
3 - > 2

我的帖子表如下:

PostID - > AuthorID - > PostDate - > PostBody
1 - > 2 - > 12/20/12 - >你好词
2 - > 3 - > 12/21/12 - >再见世界
3 - > 1 - > 12/22/12 - >哦等等 4 - > 4 - > 12/23/12 - >有人还在吗?

基本上,它的工作原理是具有ID的用户订阅了ID为2和3的用户.ID#2订阅了ID#3和#4。如果用户订阅了某个用户,他们只能看到他们订阅的人的帖子。现在,我正在使用以下类似问题中的以下内容:

SELECT POSTS.*
FROM POSTS
JOIN SUBSCRIBERS
ON POSTS.AUTHORID = SUBSCRIBERS.PROFILEID
WHERE SUBSCRIBERS.SUBSCRIBERID = ?
ORDER BY POSTS.POSTID DESC LIMIT 10

这很好用,但它也没有显示用户的帖子。我已经尝试修改它,但它不起作用:\

如果你想知道,“?”表示用户的ID

所以,如果可以的话,如果有人可以告诉我如何将用户自己的帖子与用户订阅的人的帖子一起包含在内,那就太棒了

1 个答案:

答案 0 :(得分:2)

您可以将查询修改为:

SELECT POSTS.*
FROM POSTS
LEFT JOIN SUBSCRIBERS
ON POSTS.AUTHORID = SUBSCRIBERS.PROFILEID
WHERE SUBSCRIBERS.SUBSCRIBERID = ? OR POSTS.AUTHORID = ?
GROUP BY POSTS.POSTID ORDER BY POSTS.POSTID DESC LIMIT 10 

它也会选择用户自己的帖子。希望这会有所帮助。

已更新:已添加GROUP BY POSTS.POSTID,因此您只需查找POSTS表中的数据即可删除重复项。

当你像传递值一样运行查询时 - 例如。对于id为1的用户,查询如下:

SELECT POSTS.*
FROM POSTS
LEFT JOIN SUBSCRIBERS
ON POSTS.AUTHORID = SUBSCRIBERS.PROFILEID
WHERE SUBSCRIBERS.SUBSCRIBERID = 1 OR POSTS.AUTHORID = 1 GROUP BY POSTS.POSTID
ORDER BY POSTS.POSTID DESC LIMIT 10

结果是:

PostID  AuthorID    PostDate    PostBody

3       1   2012-12-21  Oh Wait
2       3   2012-12-21  Bye Bye World
1       2   2012-12-20  Hello Word

这是将值正确传递给select查询时获得的结果。传递给SUBSCRIBERIDAUTHORID 的值应相同。 LEFT JOIN可以解决您的问题。