我有一个 MySQL 查询,用于返回两个用户之间的共同朋友,但现在我正在重新编写我的网站,我正在尝试简化此代码,或者至少让它变得更好。
所以这是我下面的代码来检查共同的朋友:
SELECT a.friendID
FROM
(SELECT CASE WHEN userID = $id
THEN userID2
ELSE userID
END AS friendID
FROM friends
WHERE (userID = $id OR userID2 = $id)
AND state='1'
) a
JOIN
(SELECT CASE WHEN userID = $session
THEN userID2
ELSE userID
END AS friendID
FROM friends
WHERE (userID = $session OR userID2 = $session)
AND state='1'
) b
ON b.friendID = a.friendID
我的桌子是这样设置的:
userID -- userID2 -- state
1 ------- 2 ------- 1
2 ------- 3 ------- 1
1 ------- 3 ------- 0
(对不起,我不知道如何进行漂亮的数据库结构设计,所以如果有人可以为我编辑...)
但是对于上述情况,当用户 1 在用户 3 的个人资料中时,由于用户 1 和用户 2 是朋友,用户 2 和用户 3 是朋友,但用户 1 和用户 3 不是,它应该返回用户 2 作为共同朋友. (状态 1 表示已接受友谊,状态 0 表示友谊待定,因此只有状态为 1 时才算作朋友)
另请注意,userID 和 userID2 可以按任何顺序排列,这取决于谁请求谁成为朋友,所以就像上面的查询一样,我还需要返回“friendID”,因为上面的查询是正确的。