Заказ по FIELD
, вероятно, является лучшим немедленным ответом для вашей ситуации в MySQL.Но возможным хорошим долгосрочным решением было бы добавить еще одну таблицу, которая поддерживает порядок сортировки по цвету, например TableColor
:
Color | Position
GREEN | 1
BLUE | 2
RED | 3
Тогда вам нужно будет только присоединить эту таблицу к вашей текущей таблице, чтобыуметь использовать его для заказа:
SELECT t1.*
FROM yourTable t1
INNER JOIN TableColor t2
ON t1.Color = t2.Color
ORDER BY
t2.Position;
Преимущество этого подхода в том, что он хорошо масштабируется, если в итоге вы скажете десятки разных цветов.В этом случае выражение FIELD
или, что еще хуже, выражение CASE
не будет хорошо масштабироваться и его будет сложно поддерживать.