我正在創建一個小型社交網絡,其中當用戶發佈任何內容時,我將獲得他轉介給他的朋友的ID。現在問題是將被引用的用戶可以在1 or 10
之間。所以現在假設一個用戶發佈了一個狀態並且引用了6個朋友。MYSQL爲多個用戶檢索共同朋友
現在我需要在發佈狀態的用戶和逐一介紹的人之間找到共同朋友。意味着假設發佈狀態的用戶的ID爲1
,並且被引用的人有2,3,4,5,6,7
。
那麼查詢將做到這一點會發現1 and 2
之間共同的朋友,然後1 and 3
然後在最後我將越來越含誰張貼的用戶和人民之間的相互朋友的結果1 and 4
並以此類推,直到7.So誰被引用(或標籤,我們可以說)。
我有兩個表User
和Friends
User Table: Friends Table:
-------------------------- -----------------------------------
UserID Name friendsid friendname userid
-------------------------- -----------------------------------
1097517748 User1 3 friend1 536772587
100003052455644 User2 8 friend2 100003052455644
536772587 User3 8 friend3 1097517748
4 User4 3 friend4 100003052455644
現在的朋友表可以包含不同的人誰做,或在用戶不存在table.In這個例子用戶2和3具有與朋友ID 8共同的。我有我的傢伙,但那個人的身份證即8
也必須在用戶表也存在。這僅在用戶ID 2和3之間。 我會得到幾個用戶ID,我找到所有的朋友與已發佈狀態的人員交談的朋友。
我希望我已經清除它。如果我得到了查詢的想法,我可以動態地使用php爲不同數量的推薦朋友生成它。
到目前爲止,我已經寫了這個查詢。
SELECT count(f1.friendsid) FROM friends AS f1
INNER JOIN friends AS f2 ON f1.friendsid = f2.friendsid
WHERE f1.userid = 100003052455644
AND f2.userid = 1097517748
但這只是給我帶來兩者之間共同的朋友user.When我添加第三個傢伙可以說f3
並與f1
比較它不會帶來任何結果,並且與此查詢的另一個問題是,它不驗證用戶表中是否存在共同的朋友id。添加第三個人之後。
SELECT count(f1.friendsid) FROM friends AS f1
INNER JOIN friends AS f2 ON f1.friendsid = f2.friendsid
INNER JOIN friends AS f3 ON f1.friendsid = f3.friendsid
WHERE f1.userid = 100003052455644
AND f2.userid = 1097517748
AND f3.userid = 536772587
此查詢不會帶來任何結果。所以我想創建一個查詢來完成所有這些。
編輯:
其實我使用Facebook Connect和我保存所有用戶的朋友在我的數據庫,當用戶登錄時,用戶表將只包含誰是註冊在我的網站的用戶。
您的模式未規範化。 「朋友」也總是一個「用戶」,對吧?因此,有一個'user'表,其中包含user_id和user_name,並且具有帶user_id和friend_id的朋友表,這兩個表都是'users.user_id'的外鍵。它會讓你的查詢更容易。 – dnagirl
檢查編輯。 – Mj1992
在userid = 1的朋友表中沒有記錄,那麼您的第一個查詢如何返回任何結果?在哪裏f1.userid = 1不符合 –