通過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;
以上內容來源於網絡,向原作者致敬。