我编写了一个确切知道MySQL查询需要做什么的示例,我曾尝试将两个查询结合起来,但我没有取得任何成功。基本上,这样做会选择$ session已经不是朋友的所有用户。
就我的表结构而言,我不知道我需要解释多少,因为你可以看到我需要使用下面的查询做什么,但基本上我的朋友表每个友谊只有一行。 (友谊仅在state
为1
并且CASE
语句对于从友谊中获取friends
ID时有效,因为我的表只有一行为了友谊。
$getUsers = mysql_query("SELECT id FROM users WHERE id!=$session");
$getFriends = mysql_query("SELECT CASE WHEN userID=$session THEN userID2 ELSE userID END AS friendID
FROM friends
WHERE (userID=$session OR userID2=$session)
AND state='1'");
$usersArray = array();
$friendsArray = array();
while($usersC = mysql_fetch_array($getUsers))
{
$usersID = $usersC['id'];
array_push($usersArray, $usersID);
}
while($usersF = mysql_fetch_array($getFriends))
{
$friendID = $usersF['friendID'];
array_push($friendsArray, $friendID);
}
print_r(array_merge(array_diff($usersArray, $friendsArray), array_diff($friendsArray, $usersArray)));
答案 0 :(得分:4)
您想要一个反连接,您可以通过外连接和过滤器来实现连接表为NULL
的记录:
SELECT users.id
FROM users LEFT JOIN friends f
ON (f.userID = $session AND f.userID2 = users.id AND f.state='1')
OR (f.userID = users.id AND f.userID2 = $session AND f.state='1')
WHERE f.userID IS NULL AND f.userID2 IS NULL
AND users.id <> $session
在sqlfiddle上查看。