萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql group by 排序問題一些自我理解

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

記得以前老師跟我講sql中group by與order by 不能同時使用,使用時會有問題,後來我工作了發現他講的是錯誤的,其實mysql group by 與排序是可使用的,只要我們稍加處理。

類如 有一個 帖子的回復表,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弱智的地方,也許是我還沒有發現.

copyright © 萬盛學電腦網 all rights reserved