MySQL获取尚未成为朋友的用户(排除在外)

时间:2015-02-04 03:26:16

标签: php mysql

这是我的问题here

的延续

基本上,我想要获取不是我朋友的用户。但是,如果用户刚刚注册并且他还没有朋友,他应该能够看到所有用户而不是他的朋友。

请检查我的sql fiddle here

 Users 
 id    username   
 1     kyle
 2     jane
 3     jim
 4     carla

 Friends
 id    username  friend
 1     kyle      jane
 2     jane      kyle
 3     kyle      jim
 4     jim       kyle

当我查询凯尔不是他的朋友时:

SELECT * FROM users AS u 
                    WHERE u.username NOT IN 
                    (
                        SELECT f.username FROM friends as f
                        WHERE f.username = 'kyle'
                        OR f.friend = 'kyle'
                    )

显示所有用户而不是他的朋友。但是,当我查询Carla时,她被包含在结果集中。她还没有朋友,但她出现在结果集中。我想从结果中删除(自我),只显示用户还不是她的朋友。

有什么想法吗?我很乐意感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

您的Friends表格应与IDs相关联,而不是Names

也就是说,这里的查询将返回每个用户的所有非朋友的列表:

SELECT u1.username as `User`, GROUP_CONCAT(u2.username) as `Not friends with`
FROM Users u1
JOIN Users u2 ON u1.id <> u2.id 
LEFT JOIN Friends f ON u1.id = f.user AND u2.id = f.friend   
WHERE f.friend IS NULL
GROUP BY u1.id

SQL Fiddle

对于单个用户(&#39; jim&#39;)也是如此:

SELECT u1.username as `User`, GROUP_CONCAT(u2.username) as `Not friends with`
FROM Users u1
JOIN Users u2 ON u1.id <> u2.id 
LEFT JOIN Friends f ON u1.id = f.user AND u2.id = f.friend   
WHERE f.friend IS NULL
      AND u1.username = 'jim'

Single-User Fiddle