作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个消息系统,下面是我的表格。
table --users
|u_id | Name |
| 01 | Aku |
| 02 | Sika |
| 03 | Admin|
table --messages
|m_id | sender_id | Body | sender_deleted | msgTime |
| 100 | 01 | hello | Yes | 16:04 |
| 200 | 02 | Hi | no | 16:08 |
table --recipient
|m_id | recipient_id | status | recipient_deleted |
|100 | 02 | read | no |
|200 | 01 | unread | no |
问题
我想从这些表中仅查询两方之间的对话(因此 u_id=01 和 u_id=02
),再次我想在 sender_deleted=yes< 时隐藏发送给 sender_id 的消息
但如果 recipient_deleted = no
recipient_id
显示相同的消息
NB-更新
我希望 u_id=01
的用户在她的页面上查看时只看到带有 m_id=200
的消息
我希望 u_id=02
的用户在她的页面上查看带有 m_id=100
和 m_id=200
的消息
这是我尝试过的方法,但我不知道如何去做
SELECT
m.sender_id,
m.Body,
u.Name,
u.u_id
FROM
messages m
LEFT JOIN
users u
ON
m.sender_id=u.u_id
LEFT JOIN
recipient r
ON
r.m_id=m.m_id
WHERE
(m.sender_id=01 OR m.sender_id=02 ) and
(r.recipient_id=01 OR r.recipient_id=02)
最佳答案
这是一种解决方案。它的工作原理是过滤用户 01 和 02 之间交换的消息,并仅显示与登录用户相关的消息:
SELECT m.sender_id, m.recipient_id, m.Body, u_sender.Name as Sender,
u_recipient.Name as Recipient, sender_deleted, recipient_deleted
FROM messages m
JOIN recipient r ON (m.m_id=r.m_id)
JOIN user u_sender ON (m.sender_id=u_sender.u_id)
JOIN user u_recipient ON (r.recipient_id=u_recipient.u_id)
WHERE
m.sender_id IN (01,02)
AND
r.recipient_id ON (01,02)
AND
((m.sender_id=<id> AND m.sender_deleted='no')
OR
(r.recipient_id=<id> AND r.recipient_deleted='no'))
您应该替换 <id>
登录的用户 ID(01 或 02)
当然,您可以更改返回的字段以显示您需要的内容。
希望这对您有所帮助!
关于mysql - 查询双方之间的消息,但对删除的用户隐藏消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24600293/
我正在努力加强我的 F#-fu,并决定解决 Facebook Hacker Cup Double Squares 问题。我在运行时遇到了一些问题,想知道是否有人可以帮助我弄清楚为什么它比我的 C# 等
我为 Web 服务定义了几个常量,我想让这些常量可供消费客户端使用。服务器和客户端都是.Net。 我认为可以通过使用枚举来实现这一点,但是我的许多常量都是带有空格的文本字符串,因此我必须编写一个额外的
我是一名优秀的程序员,十分优秀!