将这种混乱的PHP转换为一个MySQL查询
我已经编写了一个MySQL查询需要做什么的示例,我曾尝试将这两个查询组合起来,但没有成功。基本上,这会选择$session尚未成为好友的所有用户 就我的表结构而言,我不知道我需要解释多少,因为您可以看到我需要使用下面的查询来做什么,但基本上我的friends表对于每个友谊只有一行。(只有当将这种混乱的PHP转换为一个MySQL查询,php,mysql,sql,Php,Mysql,Sql,我已经编写了一个MySQL查询需要做什么的示例,我曾尝试将这两个查询组合起来,但没有成功。基本上,这会选择$session尚未成为好友的所有用户 就我的表结构而言,我不知道我需要解释多少,因为您可以看到我需要使用下面的查询来做什么,但基本上我的friends表对于每个友谊只有一行。(只有当状态为1时,友谊才有效,CASE语句是从友谊中获取朋友ID所必需的,因为我的表中只有一行友谊 $getUsers = mysql_query("SELECT id FROM users WHERE id!=$s
状态
为1
时,友谊才有效,CASE
语句是从友谊中获取朋友
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)));
您需要一个反联接,可以通过外部联接和对联接表为
NULL
的记录进行筛选来实现:
选择users.id
从用户离开加入朋友f
ON(f.userID=$session和f.userID2=users.id和f.state='1')
或者(f.userID=users.id和f.userID2=$session和f.state='1')
其中f.userID为NULL,f.userID2为NULL
和users.id$会话
请参见。您想要一个反联接,可以通过外部联接和对联接表为
NULL的记录进行筛选来实现:
选择users.id
从用户离开加入朋友f
ON(f.userID=$session和f.userID2=users.id和f.state='1')
或者(f.userID=users.id和f.userID2=$session和f.state='1')
其中f.userID为NULL,f.userID2为NULL
和users.id$会话
请在上查看。谢谢,这看起来应该可以使用,但不会返回任何内容。(此外,如果用户在“朋友”中没有任何行,它也应该可以使用)@DylanCross:对不起,我没有意识到在friends
表中有一个冲突的id
列-添加一个限定符应该可以解决这个问题。更新了我上面的答案。啊,我应该也注意到了这一点,但是是的,这非常有效。(我想说的是,它包含$session的id,但您已经处理好了,谢谢!谢谢,这看起来应该可以工作,但不会返回任何内容。(另外,如果用户在friends中没有任何行,它也应该可以工作)@DylanCross:对不起,我没有意识到在friends
表中有一个冲突的id
列-添加一个限定符应该可以解决这个问题。更新了我上面的答案。啊,我应该也注意到了这一点,但是是的,这非常有效。(我想说的是,它包括$session的id,但您已经处理好了,谢谢!