zoukankan      html  css  js  c++  java
  • 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 	hinkdbExpression('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也是没有问题的。

    这里只是做一下记录,欢迎留言交流学习。

  • 相关阅读:
    1.1【基本路由原理】(二层转发原理)1
    NP课前资料2-IOU的传统安装方式
    NP课前资料1-安装GNS3桥接ASA
    1.2 数据仓库的特性
    1-1 事务型处理与分析型处理
    易用性测试关注点(转)
    Jenkins+svn+ant+tomcat持续集成
    并发数计算
    性能测试需求采集
    性能测试指标分析与监控
  • 原文地址:https://www.cnblogs.com/blibli/p/11755212.html
Copyright © 2011-2022 走看看