К примеру есть мега-запрос:
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, то сортируется нормально :(