2

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

myfriends 表有friend_id1friend_id2列。Friends 表有friend_id,profile_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'"; 

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

4

2 回答 2

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
    );

这似乎给出了你想要的结果。

于 2013-05-15T13:50:27.217 回答
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);

于 2013-05-15T12:07:30.440 回答