选择未阻止的用户-SQL

时间:2018-07-26 11:18:52

标签: php mysql sql

我有一个表用户

  • id
  • 名称

和另一个表 blocked_users

  • user_id
  • user_blocked_id

当一个用户阻止另一个用户时,将其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';

我被查询卡住了!

2 个答案:

答案 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);