Я создаю веб-сайт с помощью Yii2, и я хотел бы отсортировать его по нескольким полям следующим образом:
SELECT * FROM tbl_product t
ORDER BY
CASE
WHEN t.product_sale_price IS NULL THEN t.product_price
ELSE t.product_sale_price
END
с запросом выше, этот набор данных:
Product | product_price | product_sale_price
--------|---------------|-------------------
Prod A | 2000 | 1200
Prod B | 1500 | NULL
Prod C | 1800 | NULL
Prod D | 1000 | 500
станет:
Product | product_price | product_sale_price
--------|---------------|-------------------
Prod D | 1000 | 500
Prod A | 2000 | 1200
Prod B | 1500 | NULL
Prod C | 1800 | NULL
Как мы можем поместить его в defaultOrder ActiveDataProvider? Я попытался:
return new ActiveDataProvider([
'sort' => [
'defaultOrder' => ['product_sale_price' => SORT_ASC, 'product_price' => SORT_ASC],
'enableMultiSort' => true,
],
]);
return new ActiveDataProvider([
'sort' => [
'defaultOrder' => '(CASE WHEN product_sale_price IS NULL THEN product_price ELSE product_sale_price END ASC)',
],
]);
Оба не работали. Как мне это сделать?