我正在尝试开发一个查询
- 给出不是由 currentUserID 写入的每个线程中的最后一条消息(现在通过 thread_id 分组完成,按 message_id desc 排序 AND WHERE results.sender_id != currentUserID)
- 如果用户启动了一个线程但没有收到响应,则该线程不应该出现(现在只需使用 WHERE results.sender_id != currentUserID 过滤数据即可完成)
- 提供一个布尔列来判断是否在此线程中发送了响应(未完成,但将涉及从查询中查找最后一个元素并查看 sender_id 是否=当前登录的用户 id)
http://sqlfiddle.com/#!2/85971/2
概要
- 用户 1 与用户 2 发送消息
- 线程 ID:1
- 主题:“嗨主题”
身体:“嗨身体”
用户 2 回复:
- 线程 ID:1
- 身体:“嗨身体反应”
作为用户 1,SQL 应该返回
THREAD_ID |SUBJECT | SENDER_ID | BODY | Responded
1 | Hi Subject | 2 | Hi Body Response | false
作为用户 2,SQL 应该返回
THREAD_ID |SUBJECT | SENDER_ID | BODY | Responded
1 | Hi Subject | 1 | Hi Body | true
请看小提琴
我对它的拍摄是以下,它需要 1 英亩和 2 英亩,但不是 3 英亩,我试图与 UNIONS 混在一起以实现这一目标,但一无所获。
SELECT * FROM (
SELECT t.id as thread_id, t.subject, m.sender_id, m.body
FROM messages m
JOIN threads t ON (m.thread_id = t.id)
ORDER BY t.id asc, m.cdate desc
) as results
WHERE results.sender_id != currentUserID
GROUP BY results.thread_id;