当前位置: 首页 > 后端技术 > PHP

查询单表分组后最新记录的其他字段值

时间:2023-03-29 15:09:25 PHP

目的:查询category_id分组下最新id的good_name表结构和数据:goods表idcategory_idgood_name113OFUM5jU6w212eAHE9yL8S32QBH6IP9mYg43fhrnLyFlyu54er7D2fBsY47pY67p56KrUxx9uhSy87cLhlDJXoIS98YdvDIUeGtR109l23e1HyyIj1110yJNNPXbWzt1212222222222解分析基本查询:根据category_id从goodsgroup中selectmax(id)cate_maxid解:取出最新记录,然后联合查询gogood_tname,tgood_tname,tgood_tname,tgood_tnamegoodst1join(selectmax(id)cate_maxid,category_idfromgoodsgroupbycategory_id)ast2ont1.id=t2.cate_maxidandt2.category_id=t1.category_id;以下方案不可行。分组后,只能检索到按其他字段升序排列的第一条记录。方案一:分组后才取数据【不可行,分组不排序】selectid,good_name,category_idfromgoodsgroupbycategory_id;方案二:排序得到结果集再分组【不可行,分组对排序后的结果集无效】selectt2.id,t2.good_name,t2.category_idfrom(select*fromgoodsorderbyiddesc)t2GROUP通过t2.category_id;方案三:同方案二,排序后得到结果集,一起查询和分组[不可用]行,分组对排序后的结果集无效]selectt1.id,t1.good_name,t1.category_idfromgoodst1join(select*fromgoodsorderbyiddesc)ast2ont1.id=t2.idgroupbyt2。类别编号;方案四:同方案三,但改变排序结果集的位置【不可行,分组对排序结果集无效】selectt1.id,t1.good_name,t1.category_idfrom(select*fromgoodsorderbyiddesc)ast2joingoodst1ont1.id=t2.idgroupbyt2.category_id;方案五:与方案二类似,排序后的结果集放在in查询中,然后分组【不可行,排序后的分组结果集无效】selectt1.id,t1.good_name,t1.category_idfromgoodst1whereidin(selectidfromgoodsorderbyiddesc)groupbyt1.category_id;20200424补充:具体原因在网上找到解释:其实和mysql版本相关:https://bugs.mysql.com/bug.php?id=80131