这是我的问题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时,她被包含在结果集中。她还没有朋友,但她出现在结果集中。我想从结果中删除(自我),只显示用户还不是她的朋友。
有什么想法吗?我很乐意感谢任何帮助。谢谢!
答案 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
对于单个用户(&#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'