MySQL - 按多个关键字排序

时间:2013-03-22 03:55:46

标签: php mysql e-commerce

为本地商家撰写电子商务。得到了所有排序等等,只是解决了问题。

现在他们有很多相同的产品,但颜色不同。所以我需要一些帮助按照所述颜色进行排序。它们由以下命名。

[制造商] - [颜色] - [系列]

示例:艺术谱 - 报春花黄 - 系列1

我需要按黄色排序,但有时它们没有某种颜色。就像黄色,而不是报春花黄色。此外,数据库中有多种颜色 - 红色,绿色,蓝色等,并且都有变体。

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

由于

2 个答案:

答案 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 |
那个

SQLFiddle

答案 1 :(得分:0)

我认为你需要在这里使用Full TEXT索引搜索。

但仅MyISAM表支持全文搜索。

FULLTEXT索引添加到您的列,然后使用以下查询:

<强>查询:

SELECT * FROM table_name
WHERE MATCH (column_name)
AGAINST ('Yellow' IN BOOLEAN MODE)