Если я вас правильно понимаю, вы можете попробовать
SELECT *
FROM products
ORDER BY TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(prod_name, '-', 2),'-', -1)
Это очевидно, позволит вам сортировать только путем точного совпадения имен цветов
SQLFiddle
UPDATE Теперь вы можете легко создать таблицу соответствия цветов, как этот
CREATE TABLE colors
(`color` varchar(64), `color2` varchar(64))
;
Заполните его с соответствующими цветами
| COLOR | COLOR2 |
----------------------------
| Primrose Yellow | Yellow |
Вы можете сначала заполнить поле color
эта таблица с помощью запроса, как этого
INSERT INTO colors (color)
SELECT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(prod_name, '-', 2),'-', -1))
FROM products
Затем вы можете использовать этот запрос, чтобы сделать то, что вы хотите
SELECT p.*
FROM products p LEFT JOIN
colors c ON TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(p.prod_name, '-', 2),'-', -1)) = c.color
ORDER BY COALESCE(c.color2, TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(p.prod_name, '-', 2),'-', -1)))
Если нет никаких записей для определенного цвета в цвете соответствие таблицы результирующего набора будет сортировка в любом случае на основе фактического значения цвета, найденного в названии продукта Это означает, что вы можете заполнить его постепенно.
Выход
| ID | PROD_NAME |
--------------------------------------------------
| 2 | Art 2 - Red - Series 1 |
| 1 | Art Spectrum - Primrose Yellow - Series 1 |
| 3 | Art Spectrum2 - Yellow - Series 2 |
SQLFiddle для этого
Вам нужно сортировать или фильтровать (выбрать) на основе цвета? – peterm
Сортировка, извините, я изменил свое сообщение, чтобы быть более ясным. – Aaron
Вы должны начать с нормализации базы данных. Разделить "[Производитель] - [Цвет] - [Серия]" на три отдельные таблицы. Затем вы можете попробовать сортировку. – aidan