mysql group by 排序問題一些自我理解

來源:互聯網
上載者:User

類如 有一個 文章的回複表,posts( id , tid , subject , message , dateline ) ,

id為 自動成長欄位, tid為該回複的主題文章的id(外部索引鍵關聯), subject 為回複標題, message 為回複內容, dateline 為回複時間,用UNIX 時間戳記表示,

現在要求 選出 前十個來自不同主題的最新回複

 代碼如下 複製代碼

SELECT * FROM posts GROUP BY tid LIMIT 10

這樣一個sql語句選出來的並非你想要的 最新的回複,而是最早的回複,實際上是某篇主題的第一條回複記錄!

也就是說 GROUP BY 語句沒有排序,那麼怎麼才能讓 GROUP 按照 dateline 倒序排列呢?加上 order by 子句?


group by 後order by不準確問題,解決如下:

錯誤語句

 代碼如下 複製代碼

select A.id, A.type, B.id, B.h1 from A,B where A.type=3 and A.id=B.id group by B.id order by A.id desc limit 10

正確語句

 代碼如下 複製代碼

select A.id, A.type, B.id, B.h1 from A,B where A.type=3 and A.id=B.id group by B.id order by max(A.id) desc limit 10

最簡單的 :

 代碼如下 複製代碼

SELECT * FROM (SELECT * FROM posts ORDER BY dateline DESC) AS p GROUP BY tid ORDER BY dateline DESC LIMIT 10

也有網友利用自串連實現的 ,這樣的效率應該比上面的子查詢效率高,不過,為了簡單明了,就只用這樣一種了,GROUP BY沒有排序功能,可能是mysql弱智的地方,也許是我還沒有發現.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.