gpt4 book ai didi

php - 数据库查询以获取每个用户的最后一条消息(如 facebook 消息)

转载 作者:可可西里 更新时间:2023-11-01 07:06:26 25 4
gpt4 key购买 nike

我需要获取登录用户和他曾与之聊天的任何用户之间的最后一条消息,就像 facebook 一样。这将类似于 facebook.com/messages 页面。这是我到目前为止所做的

数据库

用户表
- cwid
- 名字
- 姓氏
- 用户图片链接

留言
- 编号
- cwid1(发件人 ID)
- cwid2(接收者 ID)
- 消息(消息内容)
- 消息时间(时间戳)
- userread(枚举'Y''N')`

查询登录用户的 id =1

SELECT    
user_table.cwid,
message.cwid1,
message.cwid2,
message.message,
message.userread,
MAX(message.messagetime),
user_table.first_name,
user_table.last_name,
user_table.user_image_link
FROM message
INNER JOIN user_table
ON message.cwid1 = user_table.cwid
WHERE (cwid2="1")
GROUP BY cwid1
ORDER BY messagetime DESC

这会返回用户从所有给他发送消息的人那里收到的最后一条消息。我还需要类似地获取该用户发送的所有消息,可以通过

SELECT    
user_table.cwid,
message.cwid1,
message.cwid2,
message.message,
message.userread,
MAX(message.messagetime),
user_table.first_name,
user_table.last_name,
user_table.user_image_link
FROM message
INNER JOIN user_table
ON message.cwid1 = user_table.cwid
WHERE (cwid1="1")
GROUP BY cwid2
ORDER BY messagetime DESC

我需要它们与不同的用户混合,并像 Facebook 消息一样按消息时间排序。我是 MySql 的新手,非常感谢任何帮助。谢谢!

最佳答案

我做了更多的工作并提出了这个问题。- 它列出了最近用户的消息,他们给我发了消息或收到了我的消息- 它还包括来自群聊的消息,任何人都可以创建群组,群组内的任何人都可以邀请他们的 friend - 它还包括已读/未读标志,以在前端突出显示未读消息。

这不是最有效或最优雅的查询,但它可以工作。非常欢迎任何改进

SELECT * 
FROM (
SELECT *
FROM (

SELECT *
FROM (

SELECT users.id,'0' AS groupId, users.name, users.profilePic, messages.time,messages.message , 'Y' AS unread
FROM users
INNER JOIN messages ON messages.userId2 = users.id
WHERE messages.userId1 = '" . $userId . "'
UNION
SELECT users.id,'0' AS groupId, users.name,users.profilePic, messages.time, messages.message , messages.read AS unread
FROM users
INNER JOIN messages ON messages.userId1 = users.id
WHERE messages.userId2 = '" . $userId . "'
) AS allUsers
ORDER BY TIME DESC
) AS allUsersSorted
GROUP BY id
UNION
select * from(
SELECT '0' AS id, msgGroups.id AS groupId, msgGroups.name, msgGroups.image AS profilePic, IF(userGroupMsg.time IS NULL,userGroups.createdOn,userGroupMsg.time ) AS time,IF(userGroupMsg.message IS NULL,'',userGroupMsg.message ), 'Y' AS unread
FROM msgGroups
LEFT JOIN userGroups ON msgGroups.id = userGroups.groupId
LEFT JOIN userGroupMsg ON msgGroups.id = userGroupMsg.groupId
WHERE userGroups.userId = '" . $userId . "'
ORDER BY time DESC

)AS allUsersSorted
GROUP BY groupId

)AS allSorted
ORDER BY TIME DESC

如果有人可以,请改进。

关于php - 数据库查询以获取每个用户的最后一条消息(如 facebook 消息),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13076298/

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