2016-03-15 54 views
0

我正試圖讓會話用戶的所有共同朋友與另一個用戶。 這是我的結構:我想從數據庫中選擇共同的朋友,我該如何去做這件事?

CREATE TABLE `friends` (
    `friends_id` int(11) NOT NULL, 
    `friends_user` int(11) NOT NULL, 
    `friends_friend` int(11) NOT NULL, 
    `friends_date_added` datetime NOT NULL, 
    `friends_enabled` varchar(15) NOT NULL DEFAULT 'enabled' 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

我friends_user可以包含如果瀏覽用戶的會話ID或其他人的ID(取決於誰送的) 與同爲friends_friend,可以包含瀏覽用戶的會話ID,或發送它的人。 那麼我怎樣才能找到他們的共同朋友?任何幫助將非常令人沮喪。

所以它可以像這樣:

friends_user | friends_friend 
1    2 
2    3 
1    3 
5    3 
2    5 

這是我的朋友選擇了SQL,但我需要添加更多的代碼來獲得共同的朋友與另一ID:

SELECT * FROM friends 

    LEFT JOIN users 
     ON users.user_id = friends.friends_user AND friends.friends_user != ? 
     OR users.user_id = friends.friends_friend AND friends.friends_friend != ? 
    LEFT JOIN user_personal_information 
     ON users.user_id = user_personal_information.user_personal_information_user 

    WHERE (friends_user = ? 
     AND friends_enabled = 'enabled' 
     AND users.user_enabled = 'enabled') 

    OR (friends_friend = ? 
     AND friends_enabled = 'enabled' 
     AND users.user_enabled = 'enabled') 
+0

互聯網對網絡有什麼看法 共同的朋友? – Strawberry

+0

我不明白,對不起 – 4334738290

+0

這裏是僞代碼:選擇所有的用戶朋友作爲set1,然後選擇所有其他用戶朋友作爲set2,然後將它們加在一起,他們是相同的 - 這會給你你正在尋找的列表對於 – Randy

回答

0

首頁查詢讓你知道共同的朋友信息,並且子查詢應該爲你指定@myid和@theirid共享的朋友

SELECT * 
FROM users 
WHERE users.user_id IN (SELECT me.friends_friend 
          FROM  friends AS me 
            JOIN friends AS them ON me.friends_friend = them.friends_friend 
          WHERE  me.friend_user = @myid 
            AND them.friend_user = @theirid 
            AND me.friends_enabled = 'enabled' 
            AND them.friends_enabled = 'enabled')