一张表包含id、name、stage三个字段,stage值为:初中、高中、大学。用户提出需求,根据stage进行排序,如果执行mysql默认排序order by stage 无法实现的。
1.FIELD函数
FIELD()函数返回值列表中值的索引位置,语法:FIELD(value, val1, val2, val3, ...),简单的说:改函数就是返回value在集合(val1,val2,val3,...)中对应的索引位置。
SELECT id,NAME,stage FROM `test_user` ORDER BY FIELD(stage,"初中","高中","大学") ASC;
执行结果:
2.INSTR函数
INSTR(str,substr)函数返回字符串str中substr第一次出现的位置。
SELECT id,NAME,stage FROM `test_user` ORDER BY INSTR("初中,高中,大学",stage) ASC;
执行结果,跟field函数一样。
3、case when 语句
case when根据不同条件转换指定值,比如数字。代码如下:
SELECT id ,NAME,stage FROM test_user ORDER BY CASE stage WHEN '初中' THEN 1 WHEN '高中' THEN 2 WHEN '大学' THEN 3 ELSE 4 END asc
执行结果,同上。
以上几种排序方法,都可以实现。最好在入库时,改为排序值(数字),这样不需要通过函数执行。比如,通过枚举值、数据库字典。
联系客服