如何在mysql中选择2行

fkaflof6  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(456)

我有两张table users 以及 blocked 我要做的函数是 Facebook , Instagram 等,当一个用户阻止另一个用户时,我的意思是如果我用户8阻止了用户9,用户9看不到我,但他可以看到所有其他用户
我要问的是下一个问题

Select * from users WHERE id NOT IN 
(Select idblock from blocked where blocked.idBlock = users.id);

这是一张table

这是用户表

我的问题是,当我用id 3的用户登录时是可以的,但是当我用另一个id的用户登录时,不会显示其他用户
我对这个查询的期望是(什么是正确的)

正如您在blocked表中看到的,除了id 11之外,ohters id(users)阻止了我,但是如果我像id user 10那样被登录,那么显示这个

所以我不认为这是因为10号身份证没有被封锁
我希望有人能理解我

yacmzcpb

yacmzcpb1#

我会用一个 LEFT JOIN 完成所需的输出。
下面的查询尝试将指定用户(#3)的阻止请求与数据库中的所有其他用户进行匹配( LEFT JOIN ),只返回未被阻止的用户( WHERE b.id IS NULL ).

SELECT u.*
FROM users u
LEFT JOIN blocked b ON (u.id = b.idBlock AND b.idBlocked = 3)
WHERE u.id <> 3
AND b.id IS NULL;
cdmah0mi

cdmah0mi2#

你需要写信 NOT exists 关于子查询和检查 b.IdBlocked 在子查询中。

SELECT *
FROM users u 
WHERE NOT exists 
(
  Select idblock 
  from blocked b 
  where b.idBlock = u.id AND b.IdBlocked = 3
) AND u.id <> 3

sqlfiddle:http://sqlfiddle.com/#!18/c14ee/13年
如果 User ID = 3 然后
结果:

| ID |
|----|
| 11 |

如果 User ID = 10 然后

SELECT *
FROM users u 
WHERE NOT exists 
(
  Select idblock 
  from blocked b 
  where b.idBlock = u.id AND b.IdBlocked = 10
) AND u.id <> 10

结果:

| ID |
|----|
|  3 |
|  8 |
|  9 |
| 11 |

相关问题