我在php中构建了一个简化的社交网站。我有两张桌子,朋友桌和朋友桌。
myfriends表包含friend_id1
和friend_id2
列。好友表中有friend_id
,profile_name
和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)
我需要查询以获取所有不是朋友的人。这个我想出的查询来获取所有的朋友.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)
$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
);
这似乎给你想要的结果。