2013-05-15 59 views
2

我用php構建了一個簡化的社交網站。我有兩張桌子,我的朋友桌子和朋友桌子。MYSQL表加入扣除數據

myfriends表有friend_id1friend_id2列。朋友表有friend_id,​​和email列。

myfriends錶鏈接2個朋友在一起。假設一個單向關係,而不是雙向關係。這意味着friend_id1有一個朋友friend_id2,但反之亦然。

爲了說明讓剛剛只需要4名成員1001,1002,1003,1004

如果1001知道1002和1003(假設反之亦然),但1002,1003不知道對方和1004不認識的人,在myfriends表會有以下條目。

(1001,1002),(1001 ,1003),(1002 ,1001),(1003, 1001) 

我需要查詢,將得到所有誰不friends.This的人,我已拿出查詢來獲取所有的friends.friend_id是朋友的主鍵table.myfriends表可是沒有一個主鍵。

SELECT friends.profile_name 
FROM friends 
INNER JOIN myfriends ON friends.friend_id=myfriends.friend_id1 
WHERE myfriends.friend_id2='$friendID'"; 

希望大家都明白這個問題。

+0

你想查詢所有與指定人員不是朋友的人,對嗎? –

+0

你想讓那些沒有朋友的人正確嗎?在上述情況下,1004應該是結果? –

+0

你的問題不明確,你想讓所有沒有朋友的人(不在myfriends表中記錄)或者你想讓不是朋友的人(人= x)? – progrrammer

回答

0

$sql="select profile_name from friends
where friend_id<>login_user_id
and
friend_id NOT IN(select friend_id2 from myfriends where friend_id1=login_user_id);

+1

它沒有工作。我的查詢給了我一個人檔案中所有的共同朋友。我只需要一些如何從朋友表中扣除所有這些朋友表,其中有所有註冊成員,讓所有不是那個朋友的人人。 – koshi18

+1

讓我清楚一點,你真的想告訴我關於你的工作場景lettle清楚 –

+1

你想當我進入某人的個人資料我會告訴他不是他的朋友的人的個人資料名稱...是當用戶登錄到系統並想要添加新朋友時,他想要 –

0

有可能是一個更優雅的解決方案,這一點,但這裏有雲:

SELECT f.profile_name 
FROM friends f 
WHERE 
    f.id <> 1004 AND 
    f.id NOT IN 
    (
     SELECT mf.friend_1 
     FROM myfriends mf 
     WHERE 
      mf.friend_1 = 1004 AND 
      mf.friend_2 = 1004 
    ) AND 
    f.id NOT IN 
    (
     SELECT mf2.friend_2 
     FROM myfriends mf2 
     WHERE 
      mf2.friend_1 = 1004 OR 
      mf2.friend_2 = 1004 
    ); 

這似乎給你想要的結果。