我有一个表用户:
和另一个表 blocked_users :
当一个用户阻止另一个用户时,将其ID添加到 blocked_users.user_id 中,并在 blocked_users.user_blocked_id 中阻止该用户。
我想从 users 表中选择所有用户,其中 user.id 不会在 blocked_users.user_id 中退出(我已屏蔽)或 blocked_users.user_block_id (其他人已屏蔽了我)。因此他们都看不到其他人的信息。
SELECT a.*
FROM users a
LEFT JOIN blocked_users b
ON b.user_id = a.id
AND b.user_blocked_id = a.id
WHERE NOT b.user_id = '$id'
AND NOT b.user_blocked_id = '$id';
我被查询卡住了!
答案 0 :(得分:1)
使用not exists
:
select u.*
from users u
where not exists (select 1
from blocked_users bu
where bu.user_id = u.id and bu.user_blocked_id = ?
) and
not exists (select 1
from blocked_users bu
where bu.user_blocked_id = u.id and bu.user_id = ?
);
请注意?
的使用。这是用于将参数传递到查询中。这比用字符串值修饰查询要好得多。
答案 1 :(得分:0)
如果要从 users 表中选择 all 个用户,请使用以下代码:
select u.*
from users u
where not exists (select 1
from blocked_users bu
where bu.user_id = u.id)
and not exists (select 1
from blocked_users bu
where bu.user_blocked_id = u.id);