原创

thinkphp6.0自定义排序order by field


相信很多时候我们需要有个自定义排序的功能,比如登录用户的点赞排序到第一位等等。

这种情况下我们一般都是使用自定义排序的功能,那么原生sql又是怎么实现的呢?

  1. SELECT * FROM `ct_xxx` ORDER BY field(id,2,1,3) //示例代码
  2. SELECT * FROM `zhe_work_order` WHERE ( `uid` = 221 ) AND `zhe_work_order`.`delete_time` IS NULL ORDER BY field(id,1798) desc

那么在thinkphp6.0中我们如何封装成这样的语句?

  1. 1
  2. $list = WorkOrder::where("uid",$user["id"])
  3. ->orderRaw("field(id,2,12,9")
  4. ->select();
  5. //或者 2
  6. $list = WorkOrder::where("uid",$user["id"])
  7. ->orderRaw("field(id,8")
  8. ->select();
  9. //或者3
  10. Db::table('think_user')
  11. ->where('status', 1)
  12. ->orderRaw("field(name,'thinkphp','onethink','kancloud')")
  13. ->limit(5)
  14. ->select();
  15. //或者 4
  16. $list = WorkOrder::where("uid",$user["id"])
  17. ->orderRaw("field(id,1587) desc")
  18. ->select();

以上的方法都是可以的。建议使用第四种情况

本篇文章仅针对thinkphp6.0及以上版本,thinkphp5.0 - 5.1 3.2 等版本参考

https://blog.csdn.net/Aaroun/article/details/86631013

https://blog.csdn.net/qq_39973053/article/details/82864659

https://www.pianshen.com/article/36621161922/

相信以上资料可以帮助到大家。

留言反馈
问题反馈渠道,如有软件无法下载或者其他问题可反馈。【由于某种原因,目前留言不展示】
用户需要登录后才能留言反馈