更好的共同朋友查询

时间:2019-09-06 16:07:46

标签: mysql

我偶然发现了一个查询,该查询使我可以显示用户的共同朋友。乍一看,我认为它运行良好,但是仔细观察,我发现该查询还向用户显示了向其发送了朋友请求并且正在等待答案的用户。

这就是我的意思。我有一个好友表,当有人提交好友请求时,该表中会插入两行。每个用户一个。发起好友请求的用户的状态为“ 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

因此,此查询再次准确显示了共同的朋友,但是我不希望它显示共同的朋友建议(如果已经发送了请求),因为每个建议旁边都会有一个简单的按钮,单击该按钮即可发送一个要求。我想在最坏的情况下,我可以对按钮进行编码,以便如果请求已经发送,则该按钮将是取消请求/拒绝按钮或批准按钮,但是到目前为止,我只想向朋友们表明尚未被要求。谢谢您对此的任何见识。

0 个答案:

没有答案