MySQL 使用内部联接和多个条件进行查询

MySQL Query with Inner Join and multiple conditions

我无法弄清楚如何在一个 MySQL 查询中正确使用 Inner Join 并针对多个条件定位其他表。

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

帖子 Table:

id | user_id | message | timestamp

关注Table:

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号用户发帖(我自己的帖子)

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

这里有什么建议,真的很困惑。

您可以在 posts.user_id = 1ON 连接子句中添加 OR 子句,也可以在 WHERE 子句中添加 AND posts.id > ### 根据需要。

要添加条件“1.) 大于或小于 ID (posts.id)”,您可以使用 AND 运算符将条件添加到 WHERE 子句末尾的查询中。条件本身是(以大于为例):

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",您希望使用括号对条件进行分组.它可能会帮助您用通俗易懂的语言写出您的条件以及您希望如何分组。例如:

Show all posts made by me or by someone I follow, and which also have an ID of greater/less than a given number.

这些条件可以在 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;