MYSQL表连接扣除数据

时间:2013-05-15 10:55:00

标签: php mysql

我在php中构建了一个简化的社交网站。我有两张桌子,朋友桌和朋友桌。

myfriends表包含friend_id1friend_id2列。好友表中有friend_idprofile_nameemail列。

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)

我需要查询以获取所有不是朋友的人。这个我想出的查询来获取所有的朋友.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'"; 

希望大家都清楚这个问题。

2 个答案:

答案 0 :(得分: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 :(得分: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
    );

这似乎给你想要的结果。