为本地企业编写电子商务。把它都整理好了,只是解决了一些问题。
现在他们有很多相同的产品,只是颜色不同。所以我需要一些帮助来按颜色排序。它们的命名方式如下:
[制造商]-[颜色]-[系列]
示例:Art Spectrum - Primrose Yellow - Series 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
我认为你需要在这里使用Full TEXT
索引搜索。
但是全文检索只支持MyISAM
表。
为列添加FULLTEXT
索引,然后使用以下查询:
查询:
SELECT * FROM table_name
WHERE MATCH (column_name)
AGAINST ('Yellow' IN BOOLEAN MODE)