[英]MySQL Query with Inner Join and multiple conditions
我在解决如何正确使用内部联接并将一个MySQL查询中的多个条件定位到其他表方面遇到麻烦。
基本上,我正在为我的网站创建一个小型的追随者供稿,该供稿将输出您所关注的任何用户的新帖子。
帖子表:
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将被变量替换,因此对于当前用户会话是动态的。
这里有任何建议,对此真的感到困惑。
要添加条件“ 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是进行查询或查看供稿的用户的user_id。
假设您要同时满足条件1 和条件2以及既有条件“ follows.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;
您可以在posts.user_id = 1
的ON
连接子句中添加OR
子句,还可以根据需要在WHERE
子句中为posts.id > ###
加上AND
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.