mysql group_concatにorder byを指定する時の注意事項

group_concatにorder byを指定しても意図したソートにならないケースがある。
まず以下のように、group_concatに指定したcategory_idをそのカラム順でソートするケースの場合は問題ない。

group_concat(category_id order by category_id)

問題となるのは以下のようなgroup_concatの対象(category_name)とソートの基準となるカラム(category_id)が異なるケース。この場合、category_nameがcategory_id順に並ばない場合がある。

group_concat(category_name order by category_id)

これを防ぐには【group by-group_concatする前に、データをorder byでソートしておく】ことが必要。なので一つのSQLではできない(はず)ため、サブクエリ等を使う必要がある。

select group_concat(category_name order by category_id) from
(
select item_id,category_id,category_name
from item i
inner join item_category ic on i.id = ic.item_id
inner join category c on i.id = ic.category_id
order by category_id
) as tmp_tb
group by item_id

資産形成におすすめのFX口座はこちら。
http://s2fx.com/ranking/856.html