假设我有一张桌子
CREATE TABLE IF NOT EXISTS `Message` (
`ConMsgID` int(11) NOT NULL AUTO_INCREMENT,
`SenderID` int(11) DEFAULT NULL,
`ReceiverID` int(11) DEFAULT NULL,
`Text` text NOT NULL,
`DateTime` datetime NOT NULL,
`ReadStatus` tinyint(1) NOT NULL,
`ReadDateTime` datetime DEFAULT NULL,
PRIMARY KEY (`ConMsgID`),
KEY `UserID` (`SenderID`),
KEY `ReceiverID` (`ReceiverID`)
)
这是一个聊天消息表。想象一下,有2个用户正在聊天。 USER1和USER2
案例1:
USER1发送USER2,20条消息,并且USER2未读取。当USER2打开对话时,他必须看到所有20条消息。
案例2:
USER2回复USER1并发送3条消息,USER1未读。当USER1打开对话时,他将看到两个用户的最后15条消息。
希望我现在很清楚
答案 0 :(得分:1)
相应地对数据进行排序,并将结果限制为15条记录
SELECT *
FROM msgs
ORDER BY case when ReadStatus = 0 then 1 else 2 end asc,
id desc
LIMIT 15