【问题标题】:mysql query in order to get the post ids like twitter homefeed which will show our posts and also our followings postmysql查询以获取像twitter homefeed这样的帖子ID,它将显示我们的帖子以及我们的关注帖子
【发布时间】:2011-07-12 07:04:42
【问题描述】:

我有 2 个表名帖子和关注

posts表的结构是

标识 | uid |正文 |时间

follows表有userid和followers用户idfollows表的结构是

uid |关注id

现在我需要编写一个查询来获取像 twitter homefeed 这样的帖子 ID,它会显示我们的帖子以及我们关注的帖子。

SELECT posts.id FROM posts 
INNER JOIN follows ON posts.uid = follows.followingid 
AND follows.uid = "'.$currentuser.'" OR posts.uid = "'.$currentuser.'"

但是如果下表中没有条目,这将不起作用。

【问题讨论】:

  • 您正在强制内部联接,如果 FOLLOWS 表中不存在任何记录,则不会返回任何结果,因此问题的根源是内部联接。
  • 也许您应该先将following 更改为follower。 :)
  • @domanokz 最好我把它改成 followid,因为这两个都让我感到困惑。
  • @Vasanth - 你的意思是粉丝的 cmets 也在帖子表中?
  • @domanokz 不是 cmets 只是帖子..

标签: mysql join


【解决方案1】:

您基本上想要获取当前用户的所有帖子以及当前用户关注的用户的所有帖子。所以这是代码,我使用联合。首先我选择所有当前用户的帖子,然后我选择用户的帖子,然后是当前用户。

select posts.id
from posts
where posts.uid = "'.$currentuser.'"

union all

select posts.id
from posts
inner join follows
on follows.followingid = posts.uid
where follows.uid = "'.$currentuser.'"

【讨论】:

  • No left join 不起作用,因为它获取所有帖子 ID,无论条件如何。
【解决方案2】:

尝试使用LEFT JOIN 更改它,例如:

SELECT posts.id FROM posts 
   LEFT JOIN follows ON posts.uid = follows.followingid 
      AND follows.uid = "'.$currentuser.'" 
WHERE posts.uid = "'.$currentuser.'"

【讨论】:

  • No left join 不起作用,因为它获取所有帖子 ID,无论条件如何。
  • 立即尝试查询 - 我将 posts.uid 条件放在 WHERE 子句中,而不是 ON 一个
  • 我现在试过了。同样的问题,它会列出所有帖子,而不管条件如何。
猜你喜欢
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 2012-09-06
  • 2015-11-08
  • 1970-01-01
相关资源
最近更新 更多