gpt4 book ai didi

mysql - 在与每个其他用户的每次对话中查询最新消息

转载 作者:可可西里 更新时间:2023-11-01 07:58:37 24 4
gpt4 key购买 nike

我有一个表messages,用于用户之间的对话。表格列的名称是:

messageID | fromUser | forUser | message | submitDate | seen

示例数据:

1  |  1 | 2 | "hi"             | "12341" | 0
2 | 2 | 1 | "hi" | "12342" | 0
3 | 1 | 3 | "hi" | "12343" | 0
4 | 1 | 4 | "hi 4" | "12344" | 0
5 | 2 | 1 | "hello" | "12345" | 0
6 | 1 | 2 | "hello how r u?" | "12346" | 0
7 | 3 | 1 | "hello user 1" | "12345" | 0

我如何编写查询来查找我和系统中所有其他用户之间发送的最后一条消息?我的意思是最后的消息是:

between user 1 and 2 : "hello how r u?"
between user 1 and 3 : "hello user 1"
between user 4 and 1 : "hi 4""

我的查询:

$query = "SELECT DISTINCT `fromUser`, `forUser`, `message`, `seen`, 
`username`, `userPhoto`
FROM `messages`,`user`
WHERE (`forUser`= '$myUserID' OR `fromUser`= '$myUserID')
AND (((`forUser`= `userID`) AND (`forUser` != '$myUserID'))
OR ((`fromUser`= `userID`)
AND (`fromUser` != '$myUserID')))
ORDER BY `submitDate` DESC";

但是这个查询需要获取对话中的所有消息!我只需要最后一条消息。

最佳答案

试试这个简单易行的,它也会找到每个组的用户看看我的代码:-

select m.* ,u.*
from
messages m
inner join (
select max(id) as maxid
from messages
where messages.fromUser = "$myUsreId"
OR messages.forUser = "$myUsreId"
group By (if(fromUser > forUser, fromUser, forUser)),
(if(fromUser > forUser, forUser, fromUser))
) t1 on m.id=t1.maxid
join
users u ON u.id = (CASE WHEN m.fromUser = "$myUsreId"
THEN m.forUser
ELSE m.fromUser
END)

关于mysql - 在与每个其他用户的每次对话中查询最新消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29678702/

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