我有Postgres DB与user
表。用户数据为'A', 'B'和'C'
-------------------------------------------------+
| user_id | name | email | is_active |
------------+----------+-----------+-------------+
| 1 | A | a@a.in | 1 |
------------+----------+-----------+-------------+
| 2 | B | b@a.in | 1 |
------------+----------+-----------+-------------+
| 3 | C | c@a.in | 1 |
--------------------------------------------------
我已经使用sequelize方法实现了列表所有用户api,但现在需要实现块用户功能,例如:如果用户'A'块用户'B',用户'A'不会获得用户'B'的数据,用户'B'也不会检索用户'A'的数据,但用户'C'需要获得用户'B'的数据,反之亦然。这里我需要实现块用户的功能,像Instagram或Facebook使用节点express和sequelize postgres。
您所描述的是用户对用户之间的多对多关系。这是通过创建一个交集表来解决的,该交集表定义了哪些用户阻塞了哪些其他用户。
create table user_blocks_user( user_id integer references users(user_id)
, blocked_id integer references users(user_id)
, constraint user_blocks_user_pk
primary key (user_id, blocked_id)
) ;
要列出目标用户没有阻止的用户,您将users
连接到users
,并消除存在于交集表中的条目。(见演示)
select bu.*
from users ub -- user blocking
join users bu -- blocked user
on true
where ub.user_id = <user_id> -- targeted user
and ub.user_id <> bu.user_id -- eliminate self
and not exists (select null -- eliminate users blocked by targeted user
from user_blocks_user ubu
where ubu.user_id = ub.user_id
and ubu.blocked_id = bu.user_id
);
对不起,但我不知道你的模糊语言(Node Express, Sequelize),所以我把翻译留给你,或者只是使用本地SQL。