webinar
@webinar
Учим yii: https://youtu.be/-WRMlGHLgRg

Как правильно составить запрос ORDER BY CASE?

Что я делаю не так?
есть запрос
$query = Product::find()
->with(['image','salon'])
->joinWith('salonProduct', true, 'LEFT JOIN')
->orderBy([new \yii\db\Expression('
CASE salon_product.sort 
WHEN NULL 
THEN 50000 
ELSE salon_product.sort 
END
')]);

ожидаю что сортировка будет идти так, вначале поля где salon_product.sort не null в порядке возрастания, потом те что null
Но получаю, совершенно не то. Даже не могу понять по какому принципу. Но Начинается с тех где salon_product отсутствует.
У меня есть product и таблица salon_product, у которой есть поле product_id. Но не для каждого product есть salon_product. Соответственно хочу вывести вначале те, для которых есть в порядке сортировки, потом остальные неважно как.
Вот запрос:
SELECT `product`.* FROM `product` LEFT JOIN `salon_product` ON `product`.`id` = `salon_product`.`product_id` WHERE `cat_id`='1' ORDER BY CASE WHEN salon_product.sort = NULL THEN 50000 ELSE salon_product.sort END LIMIT 24
  • Вопрос задан
  • 665 просмотров
Решения вопроса 2
Urvin
@Urvin
COALESCE(salon_product.sort, 50000)
Ответ написан
kimono
@kimono
Web developer
SELECT `A`.*, IS_NULL(`B`.`sort`) `sort_is_null` FROM `product` `A`
LEFT JOIN `salon_product` `B` ON `A`.`id` = `B`.`product_id`
WHERE `A`.`cat_id`='1'
ORDER BY `sort_is_null` ASC, `B`.`sort` ASC
LIMIT 24
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы