首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从用户聊天和用户搜索中排除被阻止的用户

如何从用户聊天和用户搜索中排除被阻止的用户
EN

Stack Overflow用户
提问于 2021-05-25 13:33:54
回答 1查看 34关注 0票数 0

我已经创建了一个简单的聊天和用户搜索系统。在此系统中,当user1向user2请求聊天时,如果聊天线程不存在于user1或user2中,则将自动创建聊天线程,反之亦然。我可以成功地从聊天表中获取聊天线程。下面是用户和聊天表-

用户表

代码语言:javascript
复制
 ---------------------------
|   user_id |   user_name   |
 ---------------------------
|     16    |    Foo        |
 ---------------------------
|     17    |    Bar        |
 ---------------------------
|     20    |    John       |
 ---------------------------

聊天表

代码语言:javascript
复制
 -------------------------------------------
|   chat_id |   user_one    |   user_two    |
 -------------------------------------------
|     1     |    20         |       16      |
 -------------------------------------------
|     2     |    20         |       84      |
 -------------------------------------------
|     3     |    17         |       16      |
 -------------------------------------------

我已经实现了一个用户拦截系统。用户阻塞是基于行的。意味着如果用户1阻止了用户2,则两个用户都无法看到对方的个人资料。

块表

代码语言:javascript
复制
 -------------------------------------------
|   b_id    |   user_who    |   user_whom   |
 -------------------------------------------
|     1     |    16         |       17      |
 -------------------------------------------
|     2     |    17         |       20      |
 -------------------------------------------

以下是当"Foo“请求聊天线程时的查询-

代码语言:javascript
复制
SELECT u.user_id, c.chat_id, user_name
FROM chat c, `user` u
WHERE  
    (CASE 
        WHEN c.user_one = '16' THEN c.user_two = u.user_id
        WHEN c.user_two = '16' THEN c.user_one = u.user_id 
    END)
AND (
    c.user_one ='16'
    OR c.user_two ='16'
)
Order by c.chat_id DESC

它将从聊天表中获取两条记录,即chat_id 1和chat_id 3。但我不想显示chat_id 3,因为用户17被用户16阻止。我也想要用户17阻止用户16的相同结果。

问题是,如果用户不在阻止列表中,我不知道如何获取用户聊天线程?

期望的结果:

代码语言:javascript
复制
 -------------------------------------------
|   user_id  |   chat_id     |   user_name  |
 -------------------------------------------
|     20     |      1        |      John    |
 -------------------------------------------
EN

回答 1

Stack Overflow用户

发布于 2021-05-25 14:01:20

考虑以下查询:

代码语言:javascript
复制
SELECT u.user_id, u.user_name, c.user_one, c.user_two
FROM user u
INNER JOIN chat c
    ON c.user_one = u.user_id OR
       c.user_two = u.user_id
WHERE
    u.user_id = 16 AND
    NOT EXISTS (SELECT 1 FROM block b
                WHERE b.user_who = c.user_one AND b.user_whom = c.user_two OR
                      b.user_who = c.user_two AND b.user_whom = c.user_one);

Demo

在这里,我们根据对话双方的给定用户将userchat表连接在一起。然后,我们只保留两个用户之间的聊天,这些聊天不会出现在阻止的关系中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67682272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档