【问题标题】:MySQL Query with Inner Join and multiple conditions具有内部联接和多个条件的 MySQL 查询
【发布时间】:2015-04-08 15:20:33
【问题描述】:

我无法确定如何正确使用 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.) 指定用户ID为1的也可以发帖(我自己的帖子)

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

这里有任何建议,真的被它弄糊涂了。

【问题讨论】:

  • 至于 2) 您可以在连接条件 (ON ...) 中添加任何您想要的条件 - 您可以在此处放置一个 OR。 1) 也是如此。您只需从PHP 级别向查询添加一个参数。

标签: php mysql select conditional-statements


【解决方案1】:

要添加条件“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”,您希望使用括号对条件进行分组。它可能会帮助您用简单的语言写出您的条件以及您希望如何分组。例如:

显示我或我关注的人发布的所有帖子,并且 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;

【讨论】:

  • 非常感谢您提供的清晰示例,正是我所需要的!对如何分别处理这些条件感到困惑,不过现在说得通了。
  • 没问题!我在答案中添加了更多内容,以解释为什么您会选择这些运算符和该分组。我尝试添加足够多的细节以使其有用而又不至于让人不知所措,但是如果这个答案的一部分令人困惑,我会尝试澄清它。
【解决方案2】:

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

【讨论】:

  • 但是将 OR 添加到 ON 连接子句会与 WHERE follow.follower_id = .. 冲突,不是吗?您能否提供一个示例,这就是我对此感到困惑的地方。
猜你喜欢
  • 1970-01-01
  • 2018-03-09
  • 2021-01-05
  • 1970-01-01
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
  • 2015-10-28
  • 2014-08-28
相关资源
最近更新 更多