如何在 mysql 中制作 2 行的 select
How to make a select of 2 rows in mysql
我有两个 tables users
和 blocked
我想制作的函数是 Facebook
、Instagram
等函数。 ,当一个用户阻止另一个用户时,我的意思是如果我用户 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 |
我有两个 tables users
和 blocked
我想制作的函数是 Facebook
、Instagram
等函数。 ,当一个用户阻止另一个用户时,我的意思是如果我用户 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 |