TP5多字段排序
有业务需求如下:
select * from table where id IN (3,6,9,1,2,5,8,7) order by field(id,3,6,9,1,2,5,8,7);
这里直入主题,用TP的order方法写的话,可能不太好写,但是也可以写成这样
->order("field(id,3,6,9,1,2,5,8,7)")
但是官方文档说了,当你的order排序中使用了SQL函数的时候,请使用orderRaw方法替代order 所以并不太好实现。
所以查阅资料找到方法,资料
$exp = new \think\db\Expression('field(id,3,6,9,1,2,5,8,7)');
$result = $query->where(['id'=>['in','3,6,9,1,2,5,8,7']])->order($exp)->select();
这里我直接引用资料中的回答,如果使用模型查询的话就是:
Model::where("id","in","3,6,9,1,2,5,8,7")->order("field(id,3,6,9,1,2,5,8,7)")->select();
还可以用
orderRaw("field(users.id, $ids)"),或者
order(Db::raw("field(users.id, $ids)"))
标题说了,是多字段排序,OK,没有问题,多字段排序,你只需要在实例化Expression类的时候写上就行了
这里只是大概写一下,具体的请根据自己的业务需求进行更改,这里我一共进行了四种不同字段不同需求的排序
$exp = new Expression('field(table1.id,null),field(table2.id,null),convert(table3.field3 using gbk) asc,table4.id desc');
当然,熟悉的朋友可以直接在->orderRawz中写原生的sql也是没有问题的。
这里只是做一下记录,欢迎留言交流学习。
TP5多字段排序的更多相关文章
- PHP 二维数组根据某个字段排序
二维数组根据某个字段排序有两种办法,一种是通过sort自己写代码,一种是直接用array_multisort排序函数 一. 手写arraysort PHP的一维数组排序函数: sort 对数组的值按 ...
- 对文本行按特定字段排序(前N个字符或后N个字符),TCPL 练习5-17
The C programming language 的关于文本行排序的问题有很多种要求的方式,在对每行的字段排序方面,最简单的是例如对前N个字符或者末位N个字符进行排序,更高一点的要求是,对特殊符号 ...
- php 数组排序以及按照某个字段排序
经常,开发人员发现在PHP中使用这种数据结构对值或者数组元素进行排序非常有用.PHP提供了一些适合多种数组的排序函数,这些函数允许你在数组内部对元素进行排列,也允许用很多不同的方法对它们进行重新排序. ...
- Entity Framework 4、5 多字段排序
public interface IOrderByExpression<TEntity> where TEntity : class { IOrderedQueryable<TEnt ...
- LINQ 按多个字段排序
多字段排序 添加到 LINQ 查询结果中的Take()扩展方法用于提取前 个结果: private static void Ordering() { var racers = (from r in F ...
- [wordpress]根据自定义字段排序并根据自定义字段查询
Wordpress中,根据根据自定义字段排序和查询是通过WP_Query()方法 如根据 一个自定义的sort的数字字段从小到大进行排序 $args = array( 'post_type' => ...
- Java 多字段排序Comparator(兼容Date,Integer,Doubel,Long)
Java 反射类:ReflexUtil public class ReflexUtil { static Logger logger = LoggerFactory.getLogger(ReflexU ...
- CakePHP下使用paginator需要对多个字段排序的做法
原文:http://blog.csdn.net/kunshan_shenbin/article/details/7644603 CakePHP下使用paginator需要对多个字段排序的做法 2 ...
- angularjs 字段排序 多字段排序
我们用angularjs {{}},ng-model循环绑定数组或对象的内容的时候,有时候会用到排序,有时候可能会有多个字段排序 具体要用到过滤 数据的展现,可以通过ng-repeat实现.当网页解析 ...
随机推荐
- ES6 Set和Map集合(六)
一.Set集合创建Set实例:let set = new Set();1.特性:a.Set本身是一个构造函数,用来生成Set数据结构[类比数组结构]b.Set函数可以接受具有Iterable接口的数据 ...
- 开关VoLTE流程分析(二)
AT指令,暂未发现发送AT请求的frameworks接口,通过打印信息总结AT指令: AT+EIMSVOICE: Enable/Disable IMS Voice Capability+EIMSVOI ...
- 找出所有文件最小可resize尺寸
--找出所有文件最小可resize尺寸 SELECT a.file_id, CEIL( ( NVL( hwm,1 ) * blksize ) / 1024 / 1024 ) smallest_M, C ...
- VirtualBox打开VMware虚拟机
下载安装VirtualBox 打开VirtualBox,选择新建 设置如下: 之后就可以直接打开虚拟机了.
- AXIOS 的请求
AXIOS 本质上等同于json 传值 1.引用 //引入axios import Axios from 'axios' //将axios挂载到 Vue原型上 Vue.prototype.$https ...
- STM32F10x之NVIC
转载自:https://www.jianshu.com/p/3aa5997fe794 1 异常类型 Cortex-M3内核具有强大的异常响应系统,它把能够打断当前代码执行流程的事件分为异常(excep ...
- python windows下获取路径时有中文处理
在windows中用os,path.abspath(__file__)时有中文路径时,默认是转成非unicode格式 这会导致,在其它模块使用该路径时,会报 utf8' codec can't dec ...
- Anaconda3(2)Anaconda3中安装TensorFlow
https://zhuanlan.zhihu.com/p/34730661 1. 安装anaconda3:自行下载.安装[注意版本] (可参考引用链接) 2. 搭建TensorFlow环境 cuda1 ...
- c# 关于反射
反射的用途大体总结:1.使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从程序集中查找类型并创建该类型的实例.CreateInstance2.使用Module了解包含模块的程序集 ...
- Lab1:Linux内核编译及添加系统调用(详细版)
实验一:Linux内核编译及添加系统调用(HDU) 花了一上午的时间来写这个,良心制作,发现自己刚学的时候没有找到很详细的,就是泛泛的说了下细节地方也没有,于是自己写了这个,有点长,如果你认真的看完了 ...