为本地企业编写电子商务。把这一切都整理好了,只是解决问题。
现在他们有很多相同的产品,只是颜色不同。所以我需要一些帮助来按所说的颜色排序。它们由以下命名。
[厂家] - [颜色] - [系列]
示例:Art Spectrum - Primrose Yellow - 系列 1
我需要它们按黄色分类,但有时它们没有某种颜色。就像只是黄色,而不是月见草黄。此外,数据库中有多种颜色 - 红色、绿色、蓝色等,并且都有变体。
无论如何,我将如何排序?
谢谢
为本地企业编写电子商务。把这一切都整理好了,只是解决问题。
现在他们有很多相同的产品,只是颜色不同。所以我需要一些帮助来按所说的颜色排序。它们由以下命名。
[厂家] - [颜色] - [系列]
示例:Art Spectrum - Primrose Yellow - 系列 1
我需要它们按黄色分类,但有时它们没有某种颜色。就像只是黄色,而不是月见草黄。此外,数据库中有多种颜色 - 红色、绿色、蓝色等,并且都有变体。
无论如何,我将如何排序?
谢谢
如果我理解正确你可以试试
SELECT *
FROM products
ORDER BY TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(prod_name, '-', 2),'-', -1)
这显然会让您仅按颜色名称的完全匹配进行排序
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 |
我认为您需要在Full TEXT
这里使用索引搜索。
但仅表支持全文搜索MyISAM
。
将FULLTEXT
索引添加到您的列,然后使用以下查询:
询问:
SELECT * FROM table_name
WHERE MATCH (column_name)
AGAINST ('Yellow' IN BOOLEAN MODE)