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也是没有问题的。

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

  • 相关阅读:
    python知识点
    python模块------pyinotify
    python模块------sys
    Ansible-----变量
    Docker-----仓库
    python模块------shutil
    Ansible-----循环
    ceph简单用户管理
    【js】两个数相除有余数时结果加1
    win10家庭版和专业版远程桌面出现身份验证错误, 要求的函数不受支持。解决办法【亲测有效】
  • 原文地址:https://www.cnblogs.com/blibli/p/11755212.html
Copyright © 2011-2022 走看看