我偶然发现了一个查询,该查询使我可以显示用户的共同朋友。乍一看,我认为它运行良好,但是仔细观察,我发现该查询还向用户显示了向其发送了朋友请求并且正在等待答案的用户。
这就是我的意思。我有一个好友表,当有人提交好友请求时,该表中会插入两行。每个用户一个。发起好友请求的用户的状态为“ 1”,而所请求的用户行的状态为“ 0”。确定后,两行都将被删除(拒绝),或者两个状态都更改为“ 2”以反映活跃的友谊。
这是示例表
id user_id friend_id status date
------------------------------------------
1 52 987 2 1523498012
2 987 52 2 1523498012
3 57 29 1 1523679832
4 29 57 0 1523679832
5 65 987 1 1523785840
6 987 65 0 1523785840
这是我正在使用的查询。
SELECT
a.friend_id,
COUNT(*) as relevance,
GROUP_CONCAT(a.user_id ORDER BY a.user_id) as mutual_friends
FROM
friends a
JOIN
friends b
ON (
b.friend_id = a.user_id
AND b.status = 2
AND b.user_id = ".$_SESSION['user_id']."
)
LEFT JOIN
friends c
ON
(
c.friend_id = a.friend_id
AND c.status = 2
AND c.user_id = ".$_SESSION['user_id']."
)
WHERE
a.status = 2
AND
c.user_id IS NULL
AND
a.friend_id != ".$_SESSION['user_id']."
GROUP BY
a.friend_id
ORDER BY
RAND() LIMIT 5
因此,此查询再次准确显示了共同的朋友,但是我不希望它显示共同的朋友建议(如果已经发送了请求),因为每个建议旁边都会有一个简单的按钮,单击该按钮即可发送一个要求。我想在最坏的情况下,我可以对按钮进行编码,以便如果请求已经发送,则该按钮将是取消请求/拒绝按钮或批准按钮,但是到目前为止,我只想向朋友们表明尚未被要求。谢谢您对此的任何见识。