我在弄清楚如何正确使用Inner Join以及在一个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.)指定它也可以通过1的用户ID发布(我自己的帖子)
当然,1将被一个变量取代,因此它对于当前用户会话是动态的。
这里有什么建议,真的被它弄糊涂了。
要添加条件"1.)大于或小于ID(posts.ID)",只需在WHERE子句末尾使用AND运算符将该条件添加到查询中即可。条件本身是(以大于为例):
posts.id > $n
其中$n是某个整数。
要添加条件"2.)指定它也可以通过用户ID 1(我自己的帖子)发布",可以使用OR运算符。您提供的条件说明中的关键字是"also",这就是为什么我们要使用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;
您可以将OR
子句添加到posts.user_id = 1
的ON
联接子句中,也可以根据需要在posts.id > ###
的WHERE
子句中添加AND
。