php - 显示 "Subscriber"帖子和用户自己的帖子

标签 php mysql sql posts

这个问题困扰了我一段时间。

我的问题: 我有 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

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

关于php - 显示 "Subscriber"帖子和用户自己的帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8584224/

相关文章:

php - 根据数据库查询之外的算法结果对行进行排序

php - 将数组从 SQL 传递到 Swiftmailer

mysql - 将 MySQL 数据库从拉丁文转换为 UTF-8

mysql - 如何为具有大量表的 MySQL 数据库编写 Java Spring MVC 数据库访问类?

包含所有可用成分的 MySQL 查询配方

sql - 按 datediff 对行进行分组,然后使用 diff 函数

sql - 学习理解语法的语法

javascript - AJAX - 发送到另一个 php 文件,同时保持在同一页面上

php - MYSQL无法更新

c# - SQL Server 检查存储过程是否包含 WITH(NOLOCK)