【发布时间】:2015-11-08 00:16:20
【问题描述】:
使用 PHP 和 MySQL,我正在创建一个收件箱消息系统,它可以工作,但它在某种意义上返回双精度数。收件箱应显示两个人之间的对话以及发送的最后一条消息。用户可以单击该最新消息并与用户聊天。现在收件箱显示用户 1 发送的最新消息,如果用户 1 向用户 2 发送消息,并且如果用户 2 向用户 1 发送消息,则显示最新消息。如果用户 1 或用户 2 互相发送消息,我只想显示他们中的任何一个发送的最后一条消息。这是我的查询,我想自己做,但是我的 SQL 技能有点迟钝。
最后,这里是查询:
SELECT m.body, m.createddate,m.recuserid,m.createduserid,
FROM( SELECT MAX(createddate) as maxdate
from
messages
group by recuserid,createduserid
) c
inner join messages m on m.createddate = c.maxdate
inner join users u on u.userid = m.createduserid
WHERE createduserid = 143 OR recuserid = 143
如您所见,它以任何方式返回涉及用户 143 的任何消息。我想要的结果是只返回第一行和第三行。
【问题讨论】:
-
你得到了你想要的。 createduserid 为 143 的行,OR 其中 recuserid 为 143。
-
@xQbert 它返回第三个结果但不返回第一个结果(我自己发消息)
-
@MarcB 我意识到了这一点,但我该如何解决?
-
删除
OR recuserID = 143... 并保留该组,现在我看到了您之后的内容...尽管我会返回两个 ID 并将它们用作加入条件的一部分。 -
问题是您只查询子查询中的日期,而您应该查询日期和用户 ID,这样您就可以正确识别父记录。
标签: php mysql sms message message-queue