深度剖析mysql GROUP BY 與 ORDER BY。本站提示廣大學習愛好者:(深度剖析mysql GROUP BY 與 ORDER BY)文章只能為提供參考,不一定能成為您想要的結果。以下是深度剖析mysql GROUP BY 與 ORDER BY正文
本文就和年夜家一路深刻研討下mysql中group by與order by.上面是我模仿我的內容表
我如今須要掏出每一個分類中最新的內容
select * from test group by category_id order by `date`
成果以下
顯著。這不是我想要的數據,緣由是msyql曾經的履行次序是
援用
寫的次序:select ... from... where.... group by... having... order by..
履行次序:from... where...group by... having.... select ... order by...
所以在order by拿到的成果裡曾經是分組的完的最初成果。
由from到where的成果以下的內容。
到group by時就獲得了依據category_id分出來的多個小組
到了select的時刻,只從下面的每一個組裡取第一條信息成果會以下
即便order by也只是從下面的成果裡停止排序。其實不是每一個分類的最新信息。
回到我的目標上 --分類中最新的信息
依據下面的剖析,group by到select時只取到分組裡的第一條信息。有兩個處理辦法
1,where+group by(對小組停止排序)
2,從form前往的數據下四肢舉動(即用子查詢)
由where+group by的處理辦法
對group by裡的小組停止排序的函數我只查到group_concat()可以停止排序,但group_concat的感化是將小組裡的字段裡的值停止串連起來。
select group_concat(id order by `date` desc) from `test` group by category_id
再改良一下
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
子查詢處理計劃
select * from (select * from `test` order by `date` desc) `temp` group by category_id order by `date` desc
本身例子
SELECT * FROM (SELECT * FROM `ecm_copy_goods_change` ORDER BY `cid` DESC) `ecm_copy_goods_change` GROUP BY goods_id ORDER BY `cid` DESC