2016-03-08 31 views
0

我有一個類似twitter的跟隨者系統的網站。 我有一個MySQL表「追隨者」,如:Mysql:顯示用戶所關注的所有用戶,並添加動態列,如果我也關注該用戶

'followers' TABLE STRUCTURE: 

| user_id | follow_id | 
-------------------------- 
| 1   | 2   | 
| 1   | 3   | 
| 2   | 3   | 
| 2   | 4   | 

現在我希望得到所有用戶列出F.E.用戶2正在關注(如此3和4),但我還想要顯示當前用戶是否登錄(讓我們假設用戶1)是也是之後的用戶。眼下

Expected result when checking which users "user 2" is following: 

| user_id | follow_id | ifollow | 
--------------------------------------- 
| 2   | 3   | true  | 
| 2   | 4   | false  | 

我只是讓所有用戶是繼用戶,然後在視圖中查看包含「doIFollow($函數:這類信息應當動態地添加新的一列「ifollow」,類似這樣的ID)「來顯示正確的關注/取消關注按鈕,但我認爲只要獲得查詢所需的所有信息會更好。有誰知道這可能嗎?

回答

1

您可以使用此相關子查詢:

SELECT user_id, follow_id, 
     COALESCE((SELECT true  
       FROM followers AS f2 
       WHERE f2.follow_id = f1.follow_id AND 
         f2.user_id = 1), false) 
FROM followers AS f1 
WHERE user_id = 2 

編輯:(歸功於@Mjh)

同樣的事情也可以用一個簡單的LEFT JOIN操作完成:

SELECT f1.user_id, f1.follow_id, 
     IF(f2.user_id IS NULL, false, true) AS ifollow 
FROM followers AS f1 
LEFT JOIN followers AS f2 
    ON f1.follow_id = f2.follow_id AND f2.user_id = 1 
WHERE f1.user_id = 2 
+0

出於好奇,爲什麼這個解決方案而不是簡單的'LEFT JOIN'?一個'null'值=不遵循,non-null = following。 – Mjh

+0

@Mjh是的,你是對的。我不知道我在想什麼。 –

+0

嘿,至少我們現在有兩個解決方案:)我想這是其中的一個,我們都有他們:) – Mjh