我有兩個名為usersand的表fans。
該users表如下所示:
id | name
---------
1 | John
2 | Mark
3 | Bill
4 | Steve
5 | Jeff
這是fans表格:
fan | user
1 | 2
1 | 5
2 | 3
2 | 4
2 | 5
“粉絲”是關注用戶的用戶,“用戶”是被關注的用戶。現在如果我們將 John (id 1) 作為當前用戶,并且鑒于 John 正在關注 Mark (id 2),我們如何獲得 John 正在關注的每個人的關注,而不是 John 已經關注的人(在這種情況下 John 正在關注 Mark。Mark 正在關注用戶 3、4 和 5,但應該只回傳 3 和 4,因為 John 已經關注用戶 5。)?我嘗試與操作員一起執行此IN操作,但我不確定它是否會隨著更多條目而很好地擴展。任何幫助,將不勝感激。
uj5u.com熱心網友回復:
您必須加入多個副本fans:
SELECT f1.user
FROM fans f1
INNER JOIN fans f2 ON f2.user = f1.fan
LEFT JOIN fans f3 ON f3.fan = f2.fan AND f3.user = f1.user
WHERE f2.fan = ? AND f3.fan IS NULL;
如果您還想要用戶的姓名:
SELECT u.*
FROM users u
INNER JOIN fans f1 ON f1.user = u.ID
INNER JOIN fans f2 ON f2.user = f1.fan
LEFT JOIN fans f3 ON f3.fan = f2.fan AND f3.user = f1.user
WHERE f2.fan = ? AND f3.fan IS NULL;
更改?為所需用戶的 id。
請參閱演示。
uj5u.com熱心網友回復:
如果我理解正確,您可以嘗試加入users并fans找到關注的用戶,然后加入
SELECT *
FROM users u1
WHERE EXISTS (
SELECT 1
FROM users uu
INNER JOIN fans f
ON uu.id = f.fan
WHERE uu.id = 1 AND f.user = u1.id
)
或兩次使用自加入用戶
SELECT u1.*
FROM users u1
INNER JOIN users uu
INNER JOIN fans f
ON uu.id = f.fan AND f.user = u1.id
WHERE uu.id = 1
sqlfiddle
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/465431.html
