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