Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从数据库中选择数据并在分组后获得正确的顺序_Mysql_Sql_Join_Group By_Greatest N Per Group - Fatal编程技术网

Mysql 从数据库中选择数据并在分组后获得正确的顺序

Mysql 从数据库中选择数据并在分组后获得正确的顺序,mysql,sql,join,group-by,greatest-n-per-group,Mysql,Sql,Join,Group By,Greatest N Per Group,我有以下sql查询: SELECT chat.*, user.vorname AS vorname, user.images AS userImage, nachrichten.ID as lastMessageID FROM `chat` LEFT JOIN `user` ON chat.userID = user.ID LEFT JOIN `nachrichten` ON chat.chatToken = nachrichten.chatToken WHERE chat.userID !

我有以下sql查询:

SELECT chat.*, user.vorname AS vorname, user.images AS userImage, nachrichten.ID as lastMessageID FROM `chat` 
LEFT JOIN `user` ON chat.userID = user.ID 
LEFT JOIN `nachrichten` ON chat.chatToken = nachrichten.chatToken
WHERE chat.userID != 1 AND chat.chatToken = chat.chatToken
ORDER BY nachrichten.ID DESC
输出:

现在我想按userID对结果进行分组:

SELECT chat.*, user.vorname AS vorname, user.images AS userImage, nachrichten.ID as lastMessageID FROM `chat` 
LEFT JOIN `user` ON chat.userID = user.ID 
LEFT JOIN `nachrichten` ON chat.chatToken = nachrichten.chatToken
WHERE chat.userID != 1 AND chat.chatToken = chat.chatToken
GROUP BY chat.userID
ORDER BY nachrichten.ID DESC
结果是:

但是我得到了最低的“lastMessageID”-我想得到最高的ID

丹尼斯->97(而不是90)


我的错在哪里?

我知道您需要每个用户最新消息的
id
。如果是这样,我建议使用相关子查询而不是聚合:

select 
    c.*, 
    u.vorname, 
    u.images as userimage, 
    (select max(n.id) from `nachrichten` n where n.chatToken = c.chatToken) as lastmessageid 
from `chat` c 
inner join `user` u on u.id = c.userid
where c.userid != 1
此查询适用于任何版本的MySQL,包括5.7或更高版本,其中默认情况下只启用了
(这将导致原始查询失败,因为
SELECT
子句包含不属于
GROUP BY
子句的非聚合列)

旁注:

  • 表别名使查询更易于读取和写入

  • 我从
    where
    子句中删除了不相关的条件
    chat.chatToken=chat.chatToken
    ;如果您的itent要消除
    chat.chatToken
    null
    的行,只需使用
    c.chatToken不为null


请阅读并添加数据来源尝试:选择…,MAX(lastMessageID)…@BerndBuffen:就这样!!谢谢:)谢谢。仅将图像用于不能表示为文本或扩充文本的内容。包括带有图像的图例/图例和说明。请在代码问题中给出一个--cut&paste&runnable代码,包括作为代码输入的最小代表性示例;期望和实际输出(包括逐字记录错误消息);标签和版本;清晰的说明和解释。对于包含DBMS和DDL(包括约束和索引)的SQL,请将其输入为格式化为表的代码。