gpt4 book ai didi

php - MySQL Inbox 查询返回双结果

转载 作者:行者123 更新时间:2023-11-29 12:03:08 25 4
gpt4 key购买 nike

使用 PHP 和 MySQL,我正在创建一个收件箱消息传递系统,它可以工作,但在某种意义上它返回 double 。收件箱应显示两个人之间的对话以及发送的最后一条消息。用户可以单击该最新消息并与该用户聊天。现在,如果用户 1 向用户 2 发送消息,收件箱将显示用户 1 发送的最新消息,如果用户 2 向用户 1 发送消息,则收件箱将显示最新消息。如果用户 1 或用户 2 互相发送消息,我只想显示他们中的任何一个发送的最后一条消息。这是我的查询,我想自己做这个,但我的 SQL 技能有点迟钝。

这是我的消息表: enter image description here

这是我的用户表: enter image description here

最后,这是查询:

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

这是它返回的结果: enter image description here

如您所见,它会返回以任何方式涉及用户 143 的任何消息。我想要的结果是只返回第一行和第三行。

最佳答案

我认为这就是您所追求的:

SELECT m.`body`,
MAX(m.`createddate`) AS maxcreateddate,
m.`pairid`
FROM (SELECT `body`,
`createddate`,
CONCAT(`recuserid`,`createduserid`) as pairid
FROM `messages`
WHERE `recuserid`=143
UNION
SELECT `body`,
`createddate`,
CONCAT(`createduserid`,`recuserid`) as pairid
FROM `messages`
WHERE `createduserid`=143) as m
GROUP BY pairid;

有人可能会因为性能而 mock 我,但它确实给了你你正在寻找的结果(只是第一行和第三行)。

希望有帮助;)

关于php - MySQL Inbox 查询返回双结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32015171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com