我有以下代码
我的代码需要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查询才有效.
旁白:您的第一个查询似乎是第二个查询的子集,因此您实际上只需要第二个查询.我已经把它留作了如何做工会的演示,但在这种情况下你并不需要.
您应该能够在一个联合中执行两个查询.您的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查询才有效.
旁白:您的第一个查询似乎是第二个查询的子集,因此您实际上只需要第二个查询.我已经把它留作了如何做工会的演示,但在这种情况下你并不需要.