选择未被阻止的用户-sql

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

我有一个表用户:
身份证件
名称
另一个表阻止了用户:
用户id
用户\u被阻止\u id
当一个用户阻止另一个用户时,会将他们的id添加到被阻止的\u users.user\u id和他们在被阻止的\u users.user\u blocked\u id中阻止的用户。
我想从users表中选择我的user.id不在blocked\u users.user\u id(我已阻止的用户)或blocked\u users.user\u block\u 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';

我被这个问题困住了!

wlsrxk51

wlsrxk511#

如果要从users表中选择所有用户,请使用以下代码:

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);
gdrx4gfi

gdrx4gfi2#

使用 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 = ?
                 );

注意使用 ? . 用于将参数传入查询。这比用字符串值来填充查询要好得多。

相关问题