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

问题描述:

我在解决如何正确连接内部连接以及在一个MySQL查询中针对多个条件的其他表正确处理问题。带有内部连接和多个条件的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.)指定它可以等o由用户ID 1(我自己的帖子)发布

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

这里的任何建议,让它很困惑。

+0

至于2)你可以添加你的连接条件想要的任何条件( 'ON ...') - 你可以在那里放一个'OR'。 1)也是如此。你只需要从'PHP'级别向查询添加一个参数。 – lared 2015-02-08 23:04:20

要添加条件“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。

假设您想同时满足条件2条件1 以及预先存在的条件“following.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; 
+0

非常感谢您的明确示例,正是我需要的!对于如何单独处理这些条件感到困惑,但现在有道理。 – Danny 2015-02-09 10:09:15

+0

没问题!我在答案中多加了一点,以解释为什么你会选择那些运营商和那个分组。我试图添加足够多的细节以便不会令人难以置信,但如果这个答案的一部分令人困惑,我会试着澄清它。 – Ryan 2015-02-10 01:03:31

您可以添加OR条款的ON加入子句posts.user_id = 1,你也可以把一个ANDWHERE子句posts.id > ###需要。

+0

但是,将ON添加到ON连接子句将与WHERE冲突follow.follower_id = ..不是吗?你能否提供一个例子,这是我感到困惑的地方。 – Danny 2015-02-08 23:13:34