具有内部连接和多个条件的MySQL查询

时间:2015-02-08 23:01:19

标签: php mysql select conditional-statements

我无法确定如何正确地使用内部连接,并在一个MySQL查询中针对多个条件定位其他表。

基本上,我正在为我的网站创建一个小型关注者Feed,它会输出您所关注的任何用户的新帖子。

帖子表:

id | user_id | message | timestamp

按照表格:

id | follower_id | following_id

我的查询到目前为止:

SELECT posts.*
FROM posts
INNER JOIN follows
ON posts.user_id = follows.following_id
WHERE follows.follower_id = 1
ORDER BY id DESC limit 10

我怎样才能在其中添加条件: 1.)大于或小于ID(posts.id) 2.)指定它也可以通过用户ID 1(我自己的帖子)

发布

当然,1将被变量替换,因此它对于当前用户会话是动态的。

这里有任何建议,真的很困惑。

2 个答案:

答案 0 :(得分:1)

要添加条件" 1。)大于或小于ID(posts.id)",您只需使用AND将条件添加到WHERE子句末尾的查询中运营商。条件本身是(使用大于一个例子):

posts.id > $n

其中$ n是某个整数。

添加条件" 2.)指定它也可以通过用户ID 1(我自己的帖子)"发布,您可以使用OR运算符。您提供的条件说明中的关键字是"还",这就是我们使用OR运算符而不是AND运算符的原因。条件本身是:

posts.user_id = $my_user_id

其中$ my_user_id是进行查询或查看Feed的用户的user_id。

假设您希望满足条件1 条件2以及" follow.follower_id = 1"的预先存在的条件,您想要对条件进行分组使用括号。它可能会帮助您写出您的条件以及您希望如何用简单的语言进行分组。例如:

  

显示我或我关注的人发布的所有帖子,其ID也大于/小于给定的数字。

这些条件可以用SQL表示:

WHERE (follows.follower_id = $my_user_id
OR posts.user_id = $my_user_id)
AND posts.id > $n

完成的查询将是:

SELECT posts.*
FROM posts
INNER JOIN follows
ON posts.user_id = follows.following_id
WHERE (follows.follower_id = $my_user_id
OR posts.user_id = $my_user_id)
AND posts.id > $n
ORDER BY id DESC
LIMIT 10;

答案 1 :(得分:0)

您可以为OR的{​​{1}}联接条款添加ON子句,也可以在posts.user_id = 1 AND子句中添加WHERE 1}}根据需要。