TP5 按照汉字的拼音排序
业务需求:接口返回一个列表,但是这个列表要求按一定的条件排序,条件如下:
1,某字段(field1)为null的排前面
2,某字段(field2)为null的排前面
3,姓名(field3)按照汉字的拼音排序
4,某字段(field4)按照ID倒序排序
乍一听有点复杂,其他的不多说,这篇文章主要讲怎么在TP5里实现按照汉字的拼音排序
多字段排序这里要介绍到TP5 一个类 想了解的可以参考这篇文章《TP5多字段排序》
查阅了资料,网上千篇一律,总结了两点:
1,如果存储姓名的字段采用的是GBK字符集,那就好办了,因为GBK内码编码时本身就采用了拼音排序的方法(常用一级汉字3755个采用拼音排序,二级汉字就不是了,但考虑到人名等都是常用汉字,因此只是针对一级汉字能正确排序也够用了),直接在查询语句后面 添加 order by name asc; 查询结果按照姓氏的升序排序;
2,如果存储姓名的字段采用的是 utf8字符集,需要在排序的时候对字段进行转码;对于的代码是 order by convert(name using gbk) asc; 同样,查询的结果也是按照姓氏的升序排序;
我相信大多数人用的应该是用的utf8字符集,所以这里就使用第二种方法
但是在TP中,如果使用不当,就会报错
正确的写法应该使用这篇文章《TP5多字段排序》中的方法,TP中的一个类,超级简单超级好用。
//实例化这个类,并在实例化的时候传入你需要的排序规则
$exp = new Expression('field(table1.field1,null),field(table2.field2,null),convert(table3.field3 using gbk) asc,table4.field4 desc');
//这里是示例代码,具体需要根据自己的业务逻辑进行修改
$list = Model::join('table2 t2', 't1.id = t2.id','LEFT')
->join('table3 t3', 't1.id = t3.id','LEFT')
->join('table4 t4','t4.id = t3.id')
->field('你需要的字段')
->orderRaw($exp)
->with(['这里我进行了关联关系查询,不需要的可以用写'])->where('查询条件');
这样多字段排序就完成了,不知道有没有人注意到
我并没有使用order,而是使用了orderRaw,为什么呢?我们来看看官方文档
当你的order排序中使用了SQL函数的时候,请使用orderRaw
方法替代order
然后我们来看看查询的效果,结果显而易见,成功的按照汉字的拼音排序
如果想到倒序,你只需要在实例化的时候把asc改为desc即可。
总之,个人觉得这个方法非常好用,所以在这里记录下来,欢迎留言学习交流。
最新文章
- 探索ASP.NET MVC5系列之~~~4.模型篇---包含模型常用特性和过度提交防御
- 【linux】配置SSH免密码登陆
- linux的文件种类与扩展名
- 菜鸟学Linux命令:ssh命令 远程登录
- WebApp开发之Cordova安装教程
- 如何找到Linux下常用命令的源码
- nginx+lua+redis实现logserver
- 逻辑性最强的React Native环境搭建与调试
- select2 取值 遍历 设置默认值
- [LeetCode] Maximum Average Subarray I 子数组的最大平均值
- IDEA 新建 module
- AutoBat
- js BOM浏览器对象模型
- python 的类装饰器
- 微信小程序如何调用API实现数据请求-wx.request()
- numpy.meshgrid()
- Redhat6.4安装MongoDBv3.6.3
- USB2.0学习笔记连载(九):USB设备驱动的安装
- CSS实现跨浏览器兼容性的盒阴影效果
- crosses initialization of “XXX” 的问题
热门文章
- sql server 大数据, 统计分组查询,数据量比较大计算每秒钟执行数据执行次数
- flink Iterate迭代基本概念
- Mysql查漏补缺笔记
- Model 中的Meta类选项
- 【会话技术】Cookie技术 案例:访问时间
- PAT 乙级 1042.字符统计 C++/Java
- POJ 2516Minimum Cost(最小费用流+特判)
- qr.h
- java.time.format.DateTimeParseException: Text '2019-10-11 12:30:30' could not be parsed at index 10
- 用Python玩转微信