当前位置:  开发笔记 > 编程语言 > 正文

我可以将两个MySQL查询合并为一个吗?

如何解决《我可以将两个MySQL查询合并为一个吗?》经验,为你挑选了1个好方法。

我有以下代码


我的代码需要2个查询来获取"friends list".有没有办法执行1个查询,并可以检索所有朋友列表?

更多信息:

我有两张桌子."Users table""test_friends"桌子.用户表有:

id 代表 user id => data type int(11)

username => data type varchar(256)

Test_friends 表有:

user_id 代表 user id => data type int(11)

friend_id => data type int(11)

active => tinyint

Evan.. 6

您应该能够在一个联合中执行两个查询.您的SQL将如下所示:

SELECT U.username
FROM   users AS U
INNER JOIN test_friends AS F
ON     U.Id = F.user_id
WHERE  F.friend_id = '{$userID}'
AND    F.active = 1
UNION
SELECT u.username
FROM   users u
INNER JOIN test_friends f
ON     u.id = f.user_id
WHERE  ( f.friend_id = '{$userID}'
AND      active = 1 )
OR     ( f.user_id = '{$userID}'
AND      active = 1 )

它还会自动删除重复项,就像您在整个批次中包含DISTINCT一样.(如果你不想那样,你可以做"UNION ALL".)

此外,如果要订购结果,请在末尾添加"ORDER BY 1 ASC".您只能在ORDER BY子句中使用带有联合的结果集列号.

仅当每个子查询在结果集中返回的列的数量和类型相同时,Union查询才有效.

旁白:您的第一个查询似乎是第二个查询的子集,因此您实际上只需要第二个查询.我已经把它留作了如何做工会的演示,但在这种情况下你并不需要.



1> Evan..:

您应该能够在一个联合中执行两个查询.您的SQL将如下所示:

SELECT U.username
FROM   users AS U
INNER JOIN test_friends AS F
ON     U.Id = F.user_id
WHERE  F.friend_id = '{$userID}'
AND    F.active = 1
UNION
SELECT u.username
FROM   users u
INNER JOIN test_friends f
ON     u.id = f.user_id
WHERE  ( f.friend_id = '{$userID}'
AND      active = 1 )
OR     ( f.user_id = '{$userID}'
AND      active = 1 )

它还会自动删除重复项,就像您在整个批次中包含DISTINCT一样.(如果你不想那样,你可以做"UNION ALL".)

此外,如果要订购结果,请在末尾添加"ORDER BY 1 ASC".您只能在ORDER BY子句中使用带有联合的结果集列号.

仅当每个子查询在结果集中返回的列的数量和类型相同时,Union查询才有效.

旁白:您的第一个查询似乎是第二个查询的子集,因此您实际上只需要第二个查询.我已经把它留作了如何做工会的演示,但在这种情况下你并不需要.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有