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+0
mysql> 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)、name
mysql> 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)