使用natsort排序course_numbers

时间:2014-05-02 06:19:37

标签: mysql sorting

我有这些示例course_numbers

 cmsc 11
 cmsc 2
 cmsc 56
 cmsc 21
 cmsc 128

我使用此查询

SELECT * FROM subject ORDER BY LENGTH(`course_number`)

自然对结果进行排序

并且它有效,但是当我添加这些course_numbers时

it 1
it 256
it 20
他们有点搞砸了。

我应该使用什么查询来订购这些

 cmsc 2
 cmsc 11     
 cmsc 21
 cmsc 56
 cmsc 128
 it 1
 it 11
 it 20
 it 100
 it 256

我在他们的选择陈述中搜索并看到'案例',但我不知道如何使用它们

1 个答案:

答案 0 :(得分:1)

您应该考虑拆分课程编号的两个部分,因为“CMSC”/“IT”是一个部分(即使长度可变),实数是另一部分。如果将数字存储在数字列(int)中,则可以轻松纠正它们。

所以它会是

SELECT concat(course_type, " ", course_subnumber) as course_number, ...
from subject
order by course_type, course_subnumber

只要你有点运气,你可以尝试与你一起构建以下内容:

SELECT * from subject
order by left(course_number, 2), length(course_number), course_number

如果不同的course_types以相同的两个字母开头,那么你只会遇到麻烦。