【问题标题】:MySQL Extra condition in JOIN statementJOIN 语句中的 MySQL 额外条件
【发布时间】:2014-09-13 07:52:28
【问题描述】:

我正在为我的网站创建一个新闻提要,其中包含您关注的用户的帖子,我想知道在我的 SQL 语句中添加额外条件以在此提要中显示您自己的帖子的正确语法是什么,一切我尝试过导致错误,这是我当前的查询:

     SELECT posts.*
       FROM posts 
 INNER JOIN follow 
         ON posts.uid = follow.following_id 
      WHERE follow.follower_id = '$myUser' 
   ORDER BY posts.id DESC 
      LIMIT 10

那么,我如何添加一个条件来显示带有 $myUser 变量的 uid 的帖子?

编辑:

表结构:

帖子:

id | uid | message | date_posted

关注:

id | follower_id | following_id

【问题讨论】:

  • 如果您有机会分享当前查询的结果集,看看我们如何扩展它可能会有所帮助。
  • 我看不出这有什么必要?我只需要添加另一个例外,以返回具有用户自己 ID 的帖子以及他们关注的人。
  • 也许不是,我只是好奇。我分享了一个答案,你有没有尝试在 where 子句中使用 OR 语句?
  • OR + AND 仍然只返回我关注的人的帖子,而不是显示我自己的帖子。

标签: mysql join multiple-conditions


【解决方案1】:
SELECT      posts.* 

FROM        posts 
INNER JOIN  follow ON posts.uid = follow.following_id 

WHERE       follow.follower_id = '$myUser' 
            OR 
            posts.uid = '$myUser' 

ORDER BY    posts.id DESC LIMIT 10

【讨论】:

  • 我更新了我的评论,刚刚意识到OR会更有意义,几分钟后我会尝试一下,无论如何我还不能接受,需要等待10分钟。
  • 视需求而定,可能是andor
【解决方案2】:

我相信您想为此使用 OR 子句,因此您将收到来自关注者或用户的任何帖子。如果你使用 AND,它会返回一个 id 为 follower AND the user 的帖子,这可能不会返回任何内容。

所以这个:

SELECT posts.* FROM posts INNER JOIN follow ON posts.uid = follow.following_id WHERE follow.follower_id = '$myUser' ORDER BY posts.id DESC LIMIT 10

会变成:

SELECT posts.* FROM posts INNER JOIN follow ON posts.uid = follow.following_id WHERE follow.follower_id = '$myUser' OR posts.uid = '$myUser' ORDER BY posts.id DESC LIMIT 10

很遗憾,我现在无法对此进行测试,但我希望如果它不起作用,至少可以帮助您指明正确的方向。

【讨论】:

  • 好像没什么区别,不过还是谢谢你的回复。
  • 对不起,我似乎无法弄清楚这一点。如果你能找到解决方案,请告诉我,但我会把它记在脑后。
【解决方案3】:

如果不了解您的数据库结构就很难说,但一个好的开始是将联接更改为 LEFT 联接,并添加一个条件来检查您自己的 ID,我在帖子中假设桌子。所以,也许:

SELECT posts.* FROM posts LEFT JOIN follow ON posts.uid = follow.following_id WHERE (follow.follower_id = '$myUser' OR posts.user_id = '$myUser') ORDER BY posts.id DESC LIMIT 10

这可能是一个开始的地方。

【讨论】:

  • 使用这个没有区别,仍然只显示我关注的人的帖子,而不是我自己的。
  • 就像我说的,我们确实需要某种数据库结构。查询的第二部分只需要检查您存储创建帖子的 ID 的位置。
  • 我会用结构更新我的问题,我认为从查询中可以理解。
  • 您确定也将联接更改为左联接吗?它基本上需要检查帖子的uid是你的,还是follower_id是你的,这就是这样做的。但是,它必须是左连接,因为您的帖子不会在关注者表中匹配。
  • 是的,与您的查询完全一样,仍然只显示关注的用户帖子。
猜你喜欢
  • 2012-08-17
  • 2023-04-01
  • 2011-04-15
  • 1970-01-01
  • 2014-12-18
  • 2013-09-07
  • 1970-01-01
  • 1970-01-01
  • 2020-01-18
相关资源
最近更新 更多