2015-08-19 72 views
-2

我需要使用mysql來顯示不遵循B的用戶(A),但他們(A)後面跟着B.這將用於建議社交媒體網站上的連接。MySQL - 在同一表格中選擇

我的表結構:

ID 
FOLLOWED 
FOLLOWER 

我試着使用 LEFT JOINNOT EXISTS,但沒有奏效。


@DRapp向我展示瞭如何在此查詢上使用用戶LEFT JOIN。這樣可行。現在,如何在此查詢中添加用戶信息(LEFT JOIN + INNER JOIN)。

內連接需要與後續表和用戶表(INNER JOIN users ON follow.follower = user.id

Users`s表結構:

ID 
Name 
+0

你能告訴我們你試過了什麼嗎?我們可以在此基礎上展示並告訴您發生了什麼問題 – Smittey

+0

向我們展示您的餐桌示例。 Fallowed是一個布爾值還是一個字符串? – Hearner

+0

id是做什麼的?並考慮提供適當的樣本數據和期望的結果 – Strawberry

回答

0

鑑於 「YourTable」 的樣本數據

ID Follower Followed 
1 A   C 
2 B   C 
3 B   D 
4 B   E 
5 C   B 
6 D   A 
的場景

「B」之後的用戶包括「C」,「D」和「E」用戶。 從那以後,只有用戶「C」跟在「B」之後。所以,你要找的是任何沒有A/B,B/A類型組合的地方。所以這是LEFT-JOIN的基礎。 WHERE子句僅基於用戶「B」來查詢這些記錄,您將其視爲原始「追隨者」。

select 
     yt.Followed, 
     u.name 
    from 
     YourTable yt 
     left join YourTable yt2 
      on yt.Followed = yt2.Follower 
      AND yt.Follower = yt2.Followed 
     JOIN Users u 
      on yt.Followed = u.id 
    where 
      yt.Follower = 'B' 
     AND yt2.Followed IS NULL 

要獲得那麼名稱,注意這個聯合是一個基於用戶「B」你原來的表,但沒有找到corrresponding逆匹配。因此,我們通過用戶表中的相同ID加入原始記錄的Followed(後面跟着「B」)用戶表。然後抓取用戶的名字到查詢中。

+0

謝謝!有用! –

+0

@JoãoEvandro,很高興它的工作......作爲一個新手......檢查頂部幫助 - >巡迴賽網站禮儀和標記問題的答案,以便其他人知道一個項目是否解決。對於即使在這個和其他能夠幫助你的人提供幫助的情況下,你也可以做出有益的答案,並且你發現了一些很好的答案。 – DRapp

+0

好的。只是另一個答案。現在,如何INNER JOIN與表USERS的查詢(例如顯示A,B,C名稱)? –