Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.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
Php Mysql按获取最后一行分组_Php_Mysql - Fatal编程技术网

Php Mysql按获取最后一行分组

Php Mysql按获取最后一行分组,php,mysql,Php,Mysql,我在Mysql中构建了一个消息数据库 我为用户、对话1、对话2和消息制作了4张表 当用户试图打开其消息框时,它将取出所有对话Conversation_1 然后加入用户对话2并使用对话2找出哪个用户 而不是加入到信息中 SELECT * FROM conversation_1 LEFT JOIN conversation_2 ON conversation_1.c_id = conversation_2.c_id LEFT JOIN user ON conversation_2.user_id

我在Mysql中构建了一个消息数据库

我为用户、对话1、对话2和消息制作了4张表

当用户试图打开其消息框时,它将取出所有对话Conversation_1

然后加入用户对话2并使用对话2找出哪个用户

而不是加入到信息中

SELECT * FROM conversation_1 
LEFT JOIN conversation_2
ON conversation_1.c_id = conversation_2.c_id

LEFT JOIN user
ON conversation_2.user_id = user.user_id

LEFT JOIN message
ON conversation_1.c_id = message.c_id

WHERE conversation_1.user_id=1
GROUP BY message.c_id


conversation_1      conversation_2
c_id    user_id     c_id    user_id
1       1           1       2
2       1           2       3
3       2
它可以正常工作,但是我想通过分组显示最后一行的消息

当前显示该组中的第一行


ps.CONVERSION_1.c_id是自动递增的,并且c_id将插入到已加入此对话的对话_2中

请注意,如下所述:

MySQL扩展了GROUPBY的使用,因此select列表可以引用GROUPBY子句中未命名的未聚合列。这意味着前面的查询在MySQL中是合法的。您可以使用此功能通过避免不必要的列排序和分组来获得更好的性能。但是,这主要是在GROUP BY中未命名的每个未聚合列中的所有值对于每个组都相同时才有用。服务器可以从每个组中自由选择任何值,因此,除非它们相同,否则选择的值是不确定的。此外,添加ORDERBY子句不会影响从每个组中选择值。结果集的排序发生在选择值之后,排序依据不影响服务器在每个组中选择的值

这就是在现有查询中选择消息和可能的其他列所发生的情况

相反,您希望:

从消息中选择消息。*自然加入 按c_id从消息组中选择c_id、MAXm_id m_id T
如果没有明确的顺序,最后一个的概念是未定义的。如何识别消息表中的最后一条消息?消息id是自动递增的,我尝试使用ORDER BY m_id DESC,但它只适用于1行,没有GROUP BY,我需要的是多于1行
c_id    user_id     user_name   message
1       2           Alex        Hi user_1, this is user_2
2       3           John        hi user_3, user_2 don't talk to me
select * from (SELECT * FROM conversation_1 
LEFT JOIN conversation_2
ON conversation_1.c_id = conversation_2.c_id    
LEFT JOIN user
ON conversation_2.user_id = user.user_id    
LEFT JOIN message
ON conversation_1.c_id = message.c_id    
WHERE conversation_1.user_id=1
order by conversation_1.c_id desc) finalData
GROUP BY message.c_id