Задать вопрос

Сортировка сложного запроса

К примеру есть мега-запрос:

SELECT  `good` . * , recovery_min, recovery_max, 

@price := IF( price_c <>0, price_c, IF( mid_price <>0, mid_price, 0 ) ) AS con_price,
@color := IF( @price <>0, IF( @price < price_d,  "red", IF( @price <= price,  "yellow",  "green" ) ) ,  "white" ) AS color, 

TRUNCATE( IF( @color =  "red", recovery_min, IF( @color =  "yellow", IF( (
@price - @price * 0.002
) / price_d < recovery_min, recovery_min, (
@price - @price * 0.002
) / price_d ) , IF( @color =  "green", (
@price - @price * 0.002
) / price_d, recovery_max ) ) ) , 4 ) AS result,

FROM  `goods` AS  `good` 

JOIN  `categories` ON (  `categories`.`cat_id` =  `good`.`cat_id` ) 

WHERE  `good`.`cat_id` =  '11'

ORDER BY FIELD(  `color` ,  "red",  "yellow",  "green",  "white" ) ASC 



Почему может не работать сортировка по цветам?

Уточнение: результат без ORDER BY FIELD такой же самый, то есть эта строчка вообще не учитывается.

Так же при начальном формировании запроса сортировка работала.

Еще уточнение:

@color := IF( @price <>0, IF( @price < price_d,  "red", IF( @price <= price,  "yellow",  "green" ) ) ,  "white" ) AS color


Если тут не использовать @price, то сортируется нормально :(
  • Вопрос задан
  • 2445 просмотров
Подписаться 5 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
@korvindest
Вы не написали СУБД, поэтому советовать вам чуть сложнее, но может попробовать так:
ORDER BY CASE
WHEN color = «red» THEN 1
WHEN color = «yellow» THEN 2
ELSE 3 END
Ответ написан
Не работает потому что вы не указываете в какой таблице эти поля находятся.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы