【问题标题】:Showing "Subscriber" Posts And User's Own Posts显示“订阅者”帖子和用户自己的帖子
【发布时间】:2012-01-24 22:25:50
【问题描述】:

这让我困惑了一段时间。

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

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

【问题讨论】:

  • 最简单的方法是让用户自己订阅(考虑到您显示订阅帖子的模型,这很有意义)。
  • 如果没有其他方法,这样做可能是我最后的手段
  • 我可以看到的替代方法是使用子查询或多个查询。找到用户订阅的 profileID 列表,然后提取 profileID 在结果列表中或当前 profileID 的帖子列表。

标签: php mysql sql posts


【解决方案1】:

您可以将查询修改为:

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 可以解决您的问题。

【讨论】:

  • 我不是 SQL 专家,但我想说这可能是因为您将 AuthorID 与 ProfileID 一起加入,所以未经测试,我认为这意味着必须至少有一个人订阅用户他们的 AuthorID/ProfileID 将列在连接表中。
  • @user984935 - 查询工作正常,我已经使用您在问题中发布的数据对其进行了测试。您必须将相同的 id 传递给 SUBSCRIBERIDAUTHORID,就像我在答案后半部分更新的查询一样。
  • @user984935 确保在执行准备好的语句时传入正确数量的参数。
  • 虽然这可行,但它不会显示 ID 为 1 的用户的帖子,但会显示他们订阅的用户的帖子。
  • 好的,我再次尝试了这段代码,但是在订阅者表中,我插入了 ID 4 来订阅 ID 1,奇怪的是,ID1 自己的帖子开始出现。看来用户必须至少有一个订阅者才能看到自己的帖子。当然我真的不想要:S
猜你喜欢
  • 2019-07-24
  • 2022-07-20
  • 1970-01-01
  • 2019-02-10
  • 2020-08-31
  • 1970-01-01
  • 1970-01-01
  • 2020-11-18
  • 1970-01-01
相关资源
最近更新 更多