为本地商家撰写电子商务。得到了所有排序等等,只是解决了问题。
现在他们有很多相同的产品,但颜色不同。所以我需要一些帮助按照所述颜色进行排序。它们由以下命名。
[制造商] - [颜色] - [系列]
示例:艺术谱 - 报春花黄 - 系列1
我需要按黄色排序,但有时它们没有某种颜色。就像黄色,而不是报春花黄色。此外,数据库中有多种颜色 - 红色,绿色,蓝色等,并且都有变体。
无论如何,我将如何排序呢?
由于
答案 0 :(得分:1)
如果我理解正确,你可以尝试
SELECT *
FROM products
ORDER BY TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(prod_name, '-', 2),'-', -1)
这显然会让您只按颜色名称的完全匹配进行排序
<强> SQLFiddle 强>
更新现在,您可以轻松创建这样的颜色匹配表
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)))
如果颜色匹配表中没有特定颜色的条目,结果集将根据产品名称中找到的实际颜色值进行分类这意味着您可以逐渐填充它。 / p>
输出
| ID | PROD_NAME |
--------------------------------------------------
| 2 | Art 2 - Red - Series 1 |
| 1 | Art Spectrum - Primrose Yellow - Series 1 |
| 3 | Art Spectrum2 - Yellow - Series 2 |
那个
答案 1 :(得分:0)
我认为你需要在这里使用Full TEXT
索引搜索。
但仅MyISAM
表支持全文搜索。
将FULLTEXT
索引添加到您的列,然后使用以下查询:
<强>查询:强>
SELECT * FROM table_name
WHERE MATCH (column_name)
AGAINST ('Yellow' IN BOOLEAN MODE)