这个问题困扰了我一段时间。
我的问题: 我有 2 个不同的表。一个用于用户帖子的表和一个用于订阅者的表。
订阅者表如下所示:
订阅者 ID -> 配置文件 ID
1 -> 2
1 -> 3
2 -> 3
2 -> 4
3 -> 2
我的帖子表如下所示:
PostID -> AuthorID -> PostDate -> PostBody
1 -> 2 -> 2012 年 12 月 20 日 -> 你好词
2 -> 3 -> 12/21/12 -> 再见世界
3 -> 1 -> 12/22/12 -> 等等
4 -> 4 -> 12/23/12 -> 还有人在吗?
基本上,其工作原理是 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
因此,如果可以的话,如果有人能告诉我如何将用户自己的帖子与用户订阅的人的帖子一起包含,那就太好了
最佳答案
您可以将查询修改为:
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
这是将值正确传递给选择查询时得到的结果。传递给 SUBSCRIBERID
和 AUTHORID
的值应该相同。 LEFT JOIN 可以解决您的问题。
关于php - 显示 "Subscriber"帖子和用户自己的帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8584224/