group_concat order by文字列のソートが混乱
1788 ワード
mysql group_concat句order byを使用して文字列をソートする場合、文字列値が数値の場合、ソートがずれます.たとえば、次のようにします.
mysql> select `size_group_id`, group_concat(name order by name asc) as sizes from `basic_sizes` where `size_group_id` in (2, 1) group by `size_group_id`
-> ;
+---------------+-------------------------------------+
| size_group_id | sizes |
+---------------+-------------------------------------+
| 1 | 11,13,15,17,5,7,9 |
| 2 | 26,27,28,29,30,31,32,33,34,35,36,37 |
+---------------+-------------------------------------+
2 rows in set (0.00 sec)
ソリューション1:order by name+0mysql> select `size_group_id`, group_concat(name order by name+0 asc) as sizes from `basic_sizes` where `size_group_id` in (2, 1) group by `size_group_id`;
+---------------+-------------------------------------+
| size_group_id | sizes |
+---------------+-------------------------------------+
| 1 | 5,7,9,11,13,15,17 |
| 2 | 26,27,28,29,30,31,32,33,34,35,36,37 |
+---------------+-------------------------------------+
2 rows in set (0.01 sec)
ソリューション2:order by length(name)、namemysql> select `size_group_id`, group_concat(name order by length(name),name asc) as sizes from `basic_sizes` where `size_group_id` in (2, 1) group by `size_group_id`;
+---------------+-------------------------------------+
| size_group_id | sizes |
+---------------+-------------------------------------+
| 1 | 5,7,9,11,13,15,17 |
| 2 | 26,27,28,29,30,31,32,33,34,35,36,37 |
+---------------+-------------------------------------+
2 rows in set (0.00 sec)