在使用mysql的时候我们经常需要用到排序方法,也就是order by,如果是数字类型的字段,我们一般用order by 或者order by desc就能解决, 但是,如果我们要对字符类型的数据进行排序,那么无论正序或者倒序都无法解决,这个时候我们需要使用自定义排序,也就用到了field方法。
![28fa5f0703be9cf093b64cdba8d6cc54.png](https://img-blog.csdnimg.cn/img_convert/28fa5f0703be9cf093b64cdba8d6cc54.png)
下面举个例子,我从王者荣耀的英雄数据库中,看一下每个职业的最大生命值:
select role_main,max(hp_max) max_hp from heros group by role_main
默认结果是这样:
![1d5493bd4453d3b0e53ef37b5965ec79.png](https://img-blog.csdnimg.cn/img_convert/1d5493bd4453d3b0e53ef37b5965ec79.png)
如果我们用正序排列:
select role_main,max(hp_max) max_hp from heros group by role_mainorder by role_main
结果:
![ce55e44975f2edd8bd19f14d0ad77a9d.png](https://img-blog.csdnimg.cn/img_convert/ce55e44975f2edd8bd19f14d0ad77a9d.png)
倒序排列:
select role_main,max(hp_max) max_hp from heros group by role_mainorder by role_main desc
结果:
![1e43249fe426d4aa92800f9e7826af55.png](https://img-blog.csdnimg.cn/img_convert/1e43249fe426d4aa92800f9e7826af55.png)
使用field方法自定义排序:
select role_main,max(hp_max) max_hp from heros group by role_mainorder by field(role_main, '法师', '射手', '辅助', '战士', '坦克', '刺客')
结果:
![ecc570764b19bb70c2bf4cd689747af6.png](https://img-blog.csdnimg.cn/img_convert/ecc570764b19bb70c2bf4cd689747af6.png)
这样我们就完成了mysql自定义排序方法,field函数的语法为:第一个参数是被排序的字段名,之后按顺序输入该字段下的具体值即可。