我的表user_follow只有兩列:who和whom。當 WHO 關注 WHOM 時,它們代表用戶之間的鏈接。如果兩個用戶互相關注,他們就被認為是朋友。在這種情況下,該表將包含記錄:
WHO WHOM
1 2
2 1
其中 1 和 2 只是用戶 ID。
為了確定兩個用戶是否是朋友,我必須查詢表并使用簡單條件
SELECT COUNT(*)
FROM user_follow
WHERE (who = 1 AND whom = 2) OR (who = 2 AND whom = 1)
如果我得到2那么他們是朋友。
但是如果我想加載所有用戶的朋友串列,我不能那樣做。所以我想出了 sql join 自身:
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
我做了一個虛擬表來測驗它并且它有效。但我希望有人確認這是正確的解決方案。
uj5u.com熱心網友回復:
如果您為?. 我發現下面的查詢更容易理解。
下面的查詢列出了一個用戶的朋友(互相關注的用戶):
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
;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/399386.html
