MySQL GROUP BY + ORDER BY -> Sorting 失效

以前都是用 MyISAM Engine
常搭配 GROUP BYHAVING 撰寫 SQL
不過一直沒遇過這個問題
現在的資料庫 Engine 都是用 InnoDB 比較多
熊熊遇到 GROUP BY + ORDER BY
Sorting 失效的問題

查了一下 MySQL 5.0 Certification Study Guide,在 9.5.1 GROUP BY and Sorting 這節看到:
For database engines other than MySQL, GROUP BY might not sort rows.

後來複製了一樣的 schema 跟 data 到一個新建的 table
MySQL Engine 改用 MyISAM 測試
結果也是一樣的

剛剛想到 phpMyAdmin 的 Operations 中有個 Alter table order by 的功能
趕緊測試了一下,果然可以! :D

我的資料庫結構大致如下:
no, int(10), UNSIGNED
page_id, varchar(50)
revision, int(10), UNSIGNED

no, Primary Key
page_id, INDEX Key
page_id & revision, UNIQUE Key

原本用
SELECT * FROM `table` GROUP BY page_id ORDER BY revision DESC
出來的 revision 順序為 1、2
由於不方便使用 Distinct

後來加入
ALTER TABLE `test` ORDER BY `revision` DESC
revision 順序就變 2、1 了!


測試環境:


2008-01-03 PM 03:43 補充:
剛經測試,上面的 Alter table order by 方法只適合用於 MyISAM 格式
InnoDB 格式不適用.... ooxx

如有後續再陸續補上~

2008-01-04 PM 07:15 補充:
可以用 GROUP BY page_id DESC ORDER BY revision 的方式來替代
不過我始終覺得很納悶,雖然 GROUP BY 可以 sorting
但我要 sorting 的不是 GROUP BY 欄位阿…
可以就好了!

Comments

Anonymous said…
good info! thnks

Popular posts from this blog

mac 安裝 mtr

CentOS7 如何新增/移除 Rich Rule for firewalld

如何設定 SSL VPN 分割通道 on Fortigate 80C