私があなたを正しく理解しているなら、あなたは試すことができます
SELECT *
FROM products
ORDER BY TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(prod_name, '-', 2),'-', -1)
それは明らかに、色名の完全一致によってのみソートできるようにします
SQLフィドル
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