gpt4 book ai didi

php - 从表中选择不同的并按日期排序

转载 作者:行者123 更新时间:2023-11-29 06:15:55 26 4
gpt4 key购买 nike

我正在尝试构建消息传递系统,我想从表中选择不同的值并按日期排序,同时返回已读和未读状态。我的表结构是 id, from_user_id, to_user_id, message, datetime, read .假设虚拟数据如下:

id   |   from_user_id  | to_user_id   |  message  |      datetime       | read
1 | 20 | 50 | hi | 2016-3-13 06:05:30 | 1
2 | 20 | 50 | hey | 2016-3-13 06:15:30 | 0
3 | 30 | 50 | hi | 2016-3-14 06:05:30 | 0

现在我想选择不同的 from_user_id并按日期排序,这样我就可以在列表顶部显示最近聊天的用户的姓名,如果有任何行带有 from_user_id,也可以返回读取状态 1。已读取状态 0,那么我想返回 read为 0 以便我可以区分谁的用户消息有未读消息。

假设,from_user_idread状态为一行中的 0 然后我想返回 read返回 from_user_id 的不同值时状态为 0 .我该怎么做。我尝试如下,但在我的情况下不起作用。它返回不同的值,但不按日期排序,并且还读取未返回我期望的状态。

 select distinct(`from_user_id`),register.name FROM message INNER JOIN register ON register.id = message.from_user_id where message.to_user_id = $user_id GROUP BY message.id ORDER BY MAX(datetime) ASC

最佳答案

尝试以下查询:

SELECT
message.from_user_id,
register.name,
message.read
FROM message
INNER JOIN
(
SELECT
from_user_id,
MAX(datetime) max_datetime
FROM message
WHERE to_user_id = 50
GROUP BY from_user_id ) t
ON t.from_user_id = message.from_user_id AND t.max_datetime = message.datetime
INNER JOIN register ON register.id = message.from_user_id
WHERE message.to_user_id = 50
ORDER BY message.datetime ASC

UPDATED SQL FIDDLE

示例输入:

id   |   from_user_id  | to_user_id   |  message  |      datetime        | read

1    |          20     |     50       |    hi     |  2016-3-13 06:05:30  | 1
2 | 20 | 50 | hey | 2016-3-13 06:15:30 | 0
3 | 30 | 50 | hi | 2016-3-14 06:05:30 | 0

输出:

from_user_id        name        read

20                 User20      0
30 User30 0

注意:如果您的message 表中存在多个具有相同datetime 和相同的 to_user_id

关于php - 从表中选择不同的并按日期排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35967389/

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