通过group_concat函数
①group_concat函数
group_concat( [DISTINCT] 要连接的字段 [Order BY 排序字段 ASC/DESC] [Separator ‘分隔符’] )
作用:将要连接的字段按照排序字段的顺序用分隔符连起来显示,默认分隔符是”,”。
如:select group_concat(id order bydatedesc) fromtestgroup by category_id
按照时间排序将id连接起来,第一个一定是时间最新的。
这里写图片描述
②substring_index
substring_index(str,delim,count),str:要处理的字符串、delim:分隔符、count:计数
例子:
SELECT SUBSTRING_INDEX('www.test.com','.',1);
结果是:www
SELECT SUBSTRING_INDEX('www.test.com','.',2)
结果是:www.test
SELECT SUBSTRING_INDEX('www.test.com','.',-2);
结果为:test.com
也就是说,如果count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容,相反,如果是负数,那么就是从右边开始数,第N个分隔符右边的所有内容。
③解析
GROUP_CONCAT将group by 后的id排序后连接起来,SUBSTRING_INDEX取得每行(每个分类)的第一个。
SELECT * FROM `test` WHERE id IN(SELECT SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY `date` DESC),',',1) FROM `test` GROUP BY category_id ) ORDER BY `date` DESC;
以上内容来源于网络,向原作者致敬。