JOIN语句中的MySQL Extra条件

时间:2014-07-22 13:08:53

标签: mysql join multiple-conditions

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

     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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果没有对数据库结构的概述,很难说,但是一个好的起点是将连接更改为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

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

答案 2 :(得分:1)

我相信您希望使用OR子句,因此您将收到来自关注者或用户的任何帖子。如果您使用了AND,它将返回一个id为关注者和用户的帖子,该帖子可能不返回任何内容。

所以这个:

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

不幸的是,我现在无法对此进行测试,但我希望如果它不起作用,至少可以帮助您找到正确的方向。