我使用消息表构建聊天应用程序。
我尝试为每个与特定用户对应的用户选择3条最近的消息 像那样: 用户17有3个与他通信的用户,为每个用户选择最后3条消息
17 22
22 17
22 17
19 17
17 19
19 17
21 17
17 21
17 21
我尝试编写查询,除了一个用户之外,我得到了所有用户的好结果 - 第一个或最后一个用户 为他选择超过3条消息。 查询:
SELECT *,
DATE_FORMAT((FROM_UNIXTIME(m1.create_time)),'%k:%i, %d.%m.%Y')
as create_time_display
FROM t_messages m1
WHERE (m1.to =17 OR m1.from =17) AND (
SELECT COUNT(*)
FROM t_messages m2
WHERE m1.from = m2.from AND m2.id >= m1.id AND
(m2.to = 17 OR m2.from = 17)
) <=3`
任何想法如何让它运作良好?
感谢。
答案 0 :(得分:0)
SELECT m1.*,
DATE_FORMAT(FROM_UNIXTIME(m1.create_time),'%k:%i, %d.%m.%Y')
as create_time_display
FROM t_messages m1
WHERE (m1.to=17 OR m1.from=17) AND
(SELECT COUNT(1)
FROM t_messages m2
WHERE m2.id >= m1.id AND
(m2.to=17 and m2.from=m1.from OR m2.from=17 and m2.to=m1.to)
) <=3
如果t_messages.id
是自动增量密钥,则对其进行比较是正确的,否则您应该比较t_messages.create_time
s