从数据库中获取相互关系 table
Get mutual relationship from database table
我有 table user_follow
,它只有两列:who
和 whom
。当 WHO 跟随 WHOM 时,它们代表用户之间的链接。如果两个用户相互关注,则他们被视为朋友。在这种情况下,table 将包含记录:
WHO WHOM
1 2
2 1
其中 1 和 2 只是用户 ID。
为了确定两个用户是否是朋友,我必须查询 table 并使用简单条件
SELECT COUNT(*)
FROM user_follow
WHERE (who = 1 AND whom = 2) OR (who = 2 AND whom = 1)
如果我得到 2
那么他们就是朋友了。
但是如果我想加载所有用户的好友列表,我不能那样做。所以我想出了 sql join into itself:
SELECT uf2.whom
FROM user_follow AS uf1
LEFT JOIN user_follow AS uf2 ON uf1.who = uf2.whom
WHERE uf1.whom = ? AND uf2.who = ? ORDER BY uf2.whom
我做了一个虚拟的 table 来测试它并且它有效。但我希望有人确认这是正确的解决方案。
如果您为 ?
提供相同的参数值,我认为您的查询是正确的。我发现下面的查询更容易理解。
下面的查询列出了一个用户的好友(相互关注的用户):
SELECT uf1.whom
FROM user_follow AS uf1
INNER JOIN user_follow AS uf2
-- filter down to followed users
ON uf1.whom = uf2.who
-- followed users follow their followers
AND uf1.who = uf2.whom
-- the user whose friends are listed
WHERE uf1.who = ?
ORDER BY 1
;
我有 table user_follow
,它只有两列:who
和 whom
。当 WHO 跟随 WHOM 时,它们代表用户之间的链接。如果两个用户相互关注,则他们被视为朋友。在这种情况下,table 将包含记录:
WHO WHOM
1 2
2 1
其中 1 和 2 只是用户 ID。
为了确定两个用户是否是朋友,我必须查询 table 并使用简单条件
SELECT COUNT(*)
FROM user_follow
WHERE (who = 1 AND whom = 2) OR (who = 2 AND whom = 1)
如果我得到 2
那么他们就是朋友了。
但是如果我想加载所有用户的好友列表,我不能那样做。所以我想出了 sql join into itself:
SELECT uf2.whom
FROM user_follow AS uf1
LEFT JOIN user_follow AS uf2 ON uf1.who = uf2.whom
WHERE uf1.whom = ? AND uf2.who = ? ORDER BY uf2.whom
我做了一个虚拟的 table 来测试它并且它有效。但我希望有人确认这是正确的解决方案。
如果您为 ?
提供相同的参数值,我认为您的查询是正确的。我发现下面的查询更容易理解。
下面的查询列出了一个用户的好友(相互关注的用户):
SELECT uf1.whom
FROM user_follow AS uf1
INNER JOIN user_follow AS uf2
-- filter down to followed users
ON uf1.whom = uf2.who
-- followed users follow their followers
AND uf1.who = uf2.whom
-- the user whose friends are listed
WHERE uf1.who = ?
ORDER BY 1
;