Mysql SQL请求:显示不是朋友的人

Mysql SQL请求:显示不是朋友的人,mysql,Mysql,我正在尝试实现一个“添加朋友”页面,但我不知道该如何为用户显示正确的SQL—他可以添加的所有人。这是我的桌子: 用户: -身份证 -名字 友谊 -id\u用户 -我是你的朋友 这是与此帖子相同的数据库: 对于一个用户,我希望所有的用户都与他不是朋友,没有要求他成为朋友,也没有被要求与他成为朋友 编辑: 这是我想要的最接近的结果,我尝试过: SELECT * FROM user user LEFT JOIN friend friend ON user.id=friend.id WHERE frie

我正在尝试实现一个“添加朋友”页面,但我不知道该如何为用户显示正确的SQL—他可以添加的所有人。这是我的桌子:

用户

-身份证

-名字

友谊

-id\u用户

-我是你的朋友

这是与此帖子相同的数据库:

对于一个用户,我希望所有的用户都与他不是朋友,没有要求他成为朋友,也没有被要求与他成为朋友

编辑: 这是我想要的最接近的结果,我尝试过:

SELECT *
FROM user user
LEFT JOIN friend friend ON user.id=friend.id
WHERE friend.id IS NULL AND friend.id_friend IS NULL
但它只是返回所有没有朋友的人

提前谢谢

不是他的朋友

这应该做到:

SELECT *
FROM users U
WHERE NOT id IN (
  SELECT F.id_friend
  FROM friendship F
  WHERE U.id = F.id_friend
    AND F.id_user = 1
)
AND id != 1

但是,

谁没有要求他做朋友,谁没有被要求和他做朋友

您的架构中没有此信息

编辑:太早了:/

基于您在另一个链接问题中解释的
友谊模式

/* --------------get users who are not friends with 'Tim' */
SELECT u2.id,u2.name
FROM users u1,users u2
WHERE NOT EXISTS(SELECT 1
                 FROM friendship f
                 WHERE f.id_user = u1.id AND
                       f.id_friend = u2.id)
  AND NOT EXISTS(SELECT 1
                 FROM friendship f
                 WHERE f.id_user = u2.id AND
                       f.id_friend = u1.id)
AND u1.id != u2.id
AND u1.id = 1;

/* ---------------get users who have not asked 'Tim' to be a friend*/
SELECT u2.id,u2.name
FROM users u1,users u2
WHERE NOT EXISTS(SELECT 1
                 FROM friendship f
                 WHERE f.id_user = u2.id AND
                       f.id_friend = u1.id)
AND u1.id != u2.id
AND u1.id = 1;

/*  ------------- get users who have not been asked by 'Tim' to be a friend */
SELECT u2.id,u2.name
FROM users u1,users u2
WHERE NOT EXISTS(SELECT 1
                 FROM friendship f
                 WHERE f.id_user = u1.id AND
                       f.id_friend = u2.id)
AND u1.id != u2.id
AND u1.id = 1;
所有三个查询都已设置为基于
Tim
u1.id=1
搜索数据,只需将最后一个条件更改为您要查找的任何用户id即可

第一个查询可以组合成
条件,如下所示

/* get users who are not friends with 'Tim' */
SELECT u2.id,u2.name
FROM users u1,users u2
WHERE NOT EXISTS(SELECT 1
                 FROM friendship f
                 WHERE (f.id_user = u1.id AND
                        f.id_friend = u2.id)
                     OR(f.id_user = u2.id AND
                        f.id_friend = u1.id))
AND u1.id != u2.id
AND u1.id = 1;
Left join解决方案(您必须替换
1
的id与您选择的用户id的比较,它们在第一次查询中出现3次,在第二次和第三次查询中出现两次)


让我们看看你做了什么。我尝试了很多东西,但没有一个是结论。谢谢你的回答,但它只会给那些没有朋友的人带来回报。我应该把一个给定用户的条件放在哪里,以显示他不是朋友的人?非常感谢,这就是我要找的!
/* get users who are not friends with 'Tim' */
SELECT u2.id,u2.name
FROM users u1,users u2
WHERE NOT EXISTS(SELECT 1
                 FROM friendship f
                 WHERE (f.id_user = u1.id AND
                        f.id_friend = u2.id)
                     OR(f.id_user = u2.id AND
                        f.id_friend = u1.id))
AND u1.id != u2.id
AND u1.id = 1;
/* get users who are not friends with 'Tim' */
SELECT u.id,u.name
FROM users u
LEFT JOIN friendship f ON
  (u.id=f.id_user AND f.id_friend = 1)
OR(u.id=f.id_friend AND f.id_user = 1)
WHERE
    f.id_friend IS NULL
AND u.id != 1;

/* get users who have not asked 'Tim' to be a friend */
SELECT u.id,u.name
FROM users u
LEFT JOIN friendship f ON
  (u.id=f.id_user AND f.id_friend = 1)
WHERE
    f.id_friend IS NULL
AND u.id != 1;

/* get users who have not been asked by 'Tim' to be a friend */
SELECT u.id,u.name
FROM users u
LEFT JOIN friendship f ON
  (u.id=f.id_friend AND f.id_user = 1)
WHERE
    f.id_friend IS NULL
AND u.id != 1;