2017-02-05 84 views
0

我如何能實現在Yii2以下排序:Yii2高級排序

SELECT * FROM `orders` order by case when status != 'ORDER_DONE' then 1 else 2 end,status 

我想ORDER_DONE至底部下降狀態。任何想法?

回答

0

由於2.0.7你可以通過yii\db\ExpressionorderBy()這樣做這樣:

(new \yii\db\Query) 
->from('orders') 
->orderBy(new \yii\db\Expression('CASE WHEN status != "ORDER_DONE" THEN 1 ELSE 2 END, status')) 
->all(); 

對於排序數據提供商使用:

​​
+0

謝謝!某種程度上可以用這種解決方案來排序屬性嗎? '排序'=> [ \t '屬性'=> [ \t \t 'onlinedate'=> [ \t \t \t '遞增'=> [ 'onlinedate'=> SORT_ASC] //需要把狀態型ORDER_DONE至底部 \t \t \t '降序'=> [ 'onlinedate'=> SORT_DESC]的,//必要把型ORDER_DONE的狀態到頂部 \t \t], \t \t '狀態', \t] , ], – jahau

+0

查看我的回覆更新。 – Bizley

+0

我得到以下錯誤: 錯誤的信息:陣列 ( [0] => 42S22 [1] => 1054 [2] =>在 'order子句' 未知列 '表達') – jahau