我有 Postgres DB 和
user
表。具有用户数据“A”、“B”和“C”
-------------------------------------------------+
| user_id | name | email | is_active |
------------+----------+-----------+-------------+
| 1 | A | [email protected] | 1 |
------------+----------+-----------+-------------+
| 2 | B | [email protected] | 1 |
------------+----------+-----------+-------------+
| 3 | C | [email protected] | 1 |
--------------------------------------------------
我已经使用 sequelize 方法实现了列出所有用户 api,但现在需要实现阻止用户功能,例如:如果用户“A”阻止用户“B”,则用户“A”将不会获得用户“B”的数据并且用户“B”不会检索用户“A”的数据,但用户“C”需要获取用户“B”的数据,反之亦然。在这里,我需要使用 node express 和 sequelize postgres 实现与 Instagram 或 Facebook 相同的块用户功能。
你描述的是用户对用户之间的多对多关系。这通过创建一个交集表来解决,该表定义哪些用户阻止了哪些其他用户。
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
并消除交集表中存在的条目。 (见demo)
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。