打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
MySql高级自定义排序
userphoto

2023.09.04 天津

关注

一、问题

一张表包含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

执行结果,同上。

总结

以上几种排序方法,都可以实现。最好在入库时,改为排序值(数字),这样不需要通过函数执行。比如,通过枚举值、数据库字典。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
VBA SQL:instr函数自定义排序
php二维数组排序详解
mysql必知必会--排序检索数据
零基础快速自学SQL,2天足矣!
oracle 数据库中order by 的一些高级用法
数据库设计和SQL编写规范
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服