我下面的表格已經建議的朋友們共同的朋友在MySQL
友誼:
id | friend_one | friend_two | status | date
1 | 1 | 2 | 2 | 10/06/2016
3 | 2 | 3 | 2 | 10/06/2016
4 | 2 | 4 | 2 | 10/06/2016
5 | 2 | 5 | 2 | 10/06/2016
6 | 4 | 5 | 2 | 10/06/2016
7 | 3 | 4 | 2 | 10/06/2016
8 | 3 | 7 | 2 | 10/06/2016
9 | 5 | 1 | 2 | 10/06/2016
10 | 6 | 4 | 2 | 10/06/2016
11 | 6 | 1 | 2 | 10/06/2016
在friendship
表,status = 2
意味着他們是朋友和friend_one
是用戶是發送好友請求。
我想根據共同朋友的人數得到朋友的建議,也就是說,朋友的共同點越多,被推薦給我(用戶登錄)的機會就越大。
對於這一點,我認爲以下幾點:
- 選擇我所有的朋友,然後
- 選擇我的朋友所有的朋友(刪除我自己),然後
- 檢查我的朋友的朋友們不是我的朋友,那麼
- 推薦給朋友(通過共同的朋友爲了計數)
但是,我不能把它付諸實踐。爲了實現第一個步驟,我開始用(考慮到用戶登錄的id
1):
SELECT
CASE WHEN a.friend_one = 1 THEN a.friend_two ELSE a.friend_one END AS myFriend
FROM friendship a
WHERE 1 IN(a.friend_one, a.friend_two) AND a.status = 2
所以,我可以用ID選擇用戶的所有好友1
要實現了第二步,我所做的:
SELECT
CASE WHEN a.friend_one = 1 THEN a.friend_two ELSE a.friend_one END AS myFriend,
CASE WHEN b.friend_one = myFriend THEN b.friend_two ELSE b.friend_one END AS friendFriend
FROM friendship a
LEFT JOIN friendship b ON myFriend IN (b.friend_one, b.friend_two) AND b.status = 2
WHERE 1 IN(a.friend_one, a.friend_two) AND a.status = 2
所以,我得到的錯誤:
Error Code: 1054. Unknown column 'myFriend' in 'field list'
但是,我不知道如何繼續。我認爲的四個步驟是正確的?如果是這樣,我如何根據共同朋友的數量「修復」錯誤並獲得朋友建議?
期望的結果: 4(3周共同的朋友),3(1周共同的朋友)
根據你的闡述,建議的朋友是'5,3,4'?或者你可以發佈你想要的結果嗎? – Blank
@Forward我編輯了表格,以便更容易地呈現所需的結果並在問題中添加了所需的結果。 – Igor