-3

为本地企业编写电子商务。把这一切都整理好了,只是解决问题。

现在他们有很多相同的产品,只是颜色不同。所以我需要一些帮助来按所说的颜色排序。它们由以下命名。

[厂家] - [颜色] - [系列]

示例:Art Spectrum - Primrose Yellow - 系列 1

我需要它们按黄色分类,但有时它们没有某种颜色。就像只是黄色,而不是月见草黄。此外,数据库中有多种颜色 - 红色、绿色、蓝色等,并且都有变体。

无论如何,我将如何排序?

谢谢

4

2 回答 2

1

如果我理解正确你可以试试

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为此

于 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 回答