Php 我可以将两个MySQL查询合并为一个吗?
我有以下代码Php 我可以将两个MySQL查询合并为一个吗?,php,mysql,Php,Mysql,我有以下代码 <?php $getFriendQuery = "SELECT DISTINCT U.username FROM users as U INNER JOIN test_friends as F on U.Id = F.user_id WHERE F.friend_id = '{$userID}' && F.active=1"; $getFriendResult = mysql_query($getFriendQuery, $conn) or die (m
<?php
$getFriendQuery = "SELECT DISTINCT U.username FROM users as U INNER JOIN test_friends as F on U.Id = F.user_id WHERE F.friend_id = '{$userID}' && F.active=1";
$getFriendResult = mysql_query($getFriendQuery, $conn) or die (mysql_error());
$friendName = "";
while($getFriendFetch = mysql_fetch_assoc($getFriendResult)){
$friendName .= $getFriendFetch['username'] . ", ";
}
$getFriendQuery = "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)";
$getFriendResult = mysql_query($getFriendQuery, $conn) or die (mysql_error());
while($getFriendFetch = mysql_fetch_assoc($getFriendResult)){
$friendName .= $getFriendFetch['username'] . ", ";
}
if (!empty($friendName)){
echo "Your friends: " . $friendName ;
} else {
echo "You do not have any friends yet";
}
?>
Test\u friends
表包含:
user\u id
表示user id=>数据类型int(11)
您应该能够在一个联合中执行两个查询。您的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一样。(如果您不想这样做,您可以选择“联合所有人”。)
此外,如果要对结果排序,请在末尾添加“按1 ASC排序”。只能在ORDER BY子句中使用带有联合的结果集列号
只有当每个子查询在结果集中返回的列的数量和类型相同时,联合查询才起作用
旁白:您的第一个查询似乎是第二个查询的子集,因此您实际上只需要执行第二个查询。我把它作为如何进行联合的演示,但在这种情况下,您实际上不需要这样做。您可以在两个查询之间执行联合。例如:
SELECT username FROM users WHERE username like '%billy%'
UNION
SELECT username FROM users WHERE username like '%bob%'
将返回所有名为billy或bob的用户。将上面的两个查询与一个联合组合起来应该会起作用。由于第一个查询似乎是第二个查询的子集,您应该只需要执行第二个查询 我假设在Test\u Friends表中,user\u id字段表示用户的userid,friend\u id字段表示用户朋友的userid 如果是这种情况,则可以执行查询:
SELECT DISTINCT U.username
FROM Test\_Friends F
INNER JOIN Users U ON F.friend\_id = U.user\_id
WHERE
F.user\_id = '{$userID}' AND
F.active = 1
所以你想要$userID的朋友的名字和拥有$userID作为朋友的用户的名字? 怎么样
select distinct U.username
from users U
inner join test_friends f
on
(f.user_id = U.id AND f.friend_id={userID}) OR
(f.friend_id=U.id AND f.user_id={userID})
where active=1
所以你有这个密码。。你的问题是什么?这些查询中的一些换行符如何?看起来这个答案好像有错误。以上两个查询都是相同的,因此这些查询的并集将产生与仅执行一个查询实例相同的记录集。如果上面提供了正确的结果,您可以通过只执行一个SELECT查询来简化查询。Hmmm,必须从原始答案中剪切并粘贴错误。我现在已经修好了。谢谢
SELECT DISTINCT U.username
FROM Test\_Friends F
INNER JOIN Users U ON F.friend\_id = U.user\_id
WHERE
F.user\_id = '{$userID}' AND
F.active = 1
select distinct U.username
from users U
inner join test_friends f
on
(f.user_id = U.id AND f.friend_id={userID}) OR
(f.friend_id=U.id AND f.user_id={userID})
where active=1