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也是沒有問題的。

這里只是做一下記錄,歡迎留言交流學習。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM