-3

ローカル ビジネスの e コマースを作成します。ねじれを解決するだけで、すべてが整理されました。

今では色が違うだけで同じ商品がたくさんあります。だから私はその色でソートするのに助けが必要です。それらは次のように命名されます。

【メーカー】・【カラー】・【シリーズ】

例: Art Spectrum - Primrose Yellow - シリーズ 1

黄色で並べ替える必要がありますが、特定の種類の色がない場合があります。プリムローズイエローの代わりに、ただのイエローのように。また、データベースには複数の色 (赤、緑、青など) があり、すべてにバリエーションがあります。

とにかく、これをどのように並べ替えますか?

ありがとう

4

2 に答える 2

1

私があなたを正しく理解しているなら、あなたは試すことができます

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

于 2013-03-22T04:19:50.473 に答える
0

Full TEXTここではインデックス検索を使用する必要があると思います。

ただし、全文検索はMyISAMテーブルに対してのみサポートされています。

列にインデックスを追加FULLTEXTしてから、次のクエリを使用します。

クエリ:

SELECT * FROM table_name
WHERE MATCH (column_name)
AGAINST ('Yellow' IN BOOLEAN MODE)
于 2013-03-22T04:03:15.003 に答える