如何在 mysql 中制作 2 行的 select

How to make a select of 2 rows in mysql

我有两个 tables usersblocked 我想制作的函数是 FacebookInstagram 等函数。 ,当一个用户阻止另一个用户时,我的意思是如果我用户 8 阻止用户 9 用户 9 看不到我,但他可以看到所有其他用户

我尝试进行查询的方式是下一个

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

这是被屏蔽的table

这是 table 的用户

我遇到的问题是,当我使用 ID 3 的用户登录时没有问题,但是当我使用另一个 ID 的用户登录时,不显示其他用户

我对查询的期望是这个(正确的)

正如您在被阻止的 table 中看到的那样,其他 id(用户)阻止了我,除了 id 11,但是如果我像 id user 10 一样登录,请告诉我这个

所以我不想要这个,因为 id 10 没有被屏蔽

希望有人理解我

我会使用 LEFT JOIN 来完成所需的输出。

以下查询的作用是尝试将指定用户 (#3) 的阻止请求与数据库中的所有其他用户 (LEFT JOIN) 进行匹配,并且仅 return 那些没有请求的用户'已被阻止 (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;

你需要在子查询上写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 |