将这种混乱的PHP转换为一个MySQL查询

将这种混乱的PHP转换为一个MySQL查询,php,mysql,sql,Php,Mysql,Sql,我已经编写了一个MySQL查询需要做什么的示例,我曾尝试将这两个查询组合起来,但没有成功。基本上,这会选择$session尚未成为好友的所有用户 就我的表结构而言,我不知道我需要解释多少,因为您可以看到我需要使用下面的查询来做什么,但基本上我的friends表对于每个友谊只有一行。(只有当状态为1时,友谊才有效,CASE语句是从友谊中获取朋友ID所必需的,因为我的表中只有一行友谊 $getUsers = mysql_query("SELECT id FROM users WHERE id!=$s

我已经编写了一个MySQL查询需要做什么的示例,我曾尝试将这两个查询组合起来,但没有成功。基本上,这会选择$session尚未成为好友的所有用户

就我的表结构而言,我不知道我需要解释多少,因为您可以看到我需要使用下面的查询来做什么,但基本上我的friends表对于每个友谊只有一行。(只有当
状态
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,但您已经处理好了,谢谢!