【发布时间】:2021-05-25 05:33:53
【问题描述】:
我创建了一个简单的聊天和用户搜索系统。在此系统中,当 user1 向 user2 请求聊天时,如果 user1 或 user2 不存在聊天线程,则将自动创建一个聊天线程,反之亦然。我可以成功地从聊天表中获取聊天线程。下面是用户和聊天表-
用户表
---------------------------
| user_id | user_name |
---------------------------
| 16 | Foo |
---------------------------
| 17 | Bar |
---------------------------
| 20 | John |
---------------------------
聊天桌
-------------------------------------------
| chat_id | user_one | user_two |
-------------------------------------------
| 1 | 20 | 16 |
-------------------------------------------
| 2 | 20 | 84 |
-------------------------------------------
| 3 | 17 | 16 |
-------------------------------------------
我已经实施了用户阻止系统。用户阻止是基于行的。表示如果用户 1 屏蔽了用户 2,则两个用户都无法看到彼此的个人资料。
块表
-------------------------------------------
| b_id | user_who | user_whom |
-------------------------------------------
| 1 | 16 | 17 |
-------------------------------------------
| 2 | 17 | 20 |
-------------------------------------------
这里是“Foo”请求聊天线程时的查询-
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,我也想要相同的结果.
问题是如果用户不在阻止列表中,我不明白如何获取用户聊天线程?
想要的结果:
-------------------------------------------
| user_id | chat_id | user_name |
-------------------------------------------
| 20 | 1 | John |
-------------------------------------------
【问题讨论】:
标签: mysql