如何分解字符串多种颜色并使用MySql中的查询对其进行分组

InN*_*oor 2 mysql sql grouping view

我有一张桌子,shoes_tbl每只鞋子都有一种颜色,有时有多种颜色的例子:

包含字段:鞋子、颜色

1. shoe1, black
2. shoe2, white
3. shoe3, red white
4. shoe4, red blue
5. shoe5, white
6. shoe6, blue
Run Code Online (Sandbox Code Playgroud)

如果我使用: SELECT color FROM shoes_tbl GROUP BY color

输出将是:

黑、白、红白、红蓝、蓝

我想成为 :

黑、白、红、蓝

任何想法?谢谢..

Tra*_*ler 5

我建议问题是你有一个数组存储在字段中,这几乎从来都不是一个好主意。

如果您正处于项目的开发阶段,我建议将其放在 2 或 3 个表中。

第一个放鞋子。在第二个中放置颜色。然后创建连接到前两个表的第三个表。

如果 3 个表对您来说太多了,则以主键是 Shoes_id 和颜色的方式制作第二个表(带有颜色的表)。还将 coor 设置为枚举。它会让事情变得更简单。

加入表格后,您可以轻松地加入该组。

    CREATE TABLE Shoe (
        shoe_id INT NOT NULL AUTO_INCREMENT,
        name CHAR(50),
        price DOUBLE,
        PRIMARY KEY (shoe_id)
    );

CREATE TABLE Color (
    color_id INT NOT NULL AUTO_INCREMENT,
    name CHAR(50),
    PRIMARY KEY (color_id)
);


CREATE TABLE shoe_color (
    shoe_id INT NOT NULL,
    color_id INT NOT NULL,
    PRIMARY KEY (id, color_id),
    FOREIGN KEY (shoe_id) REFERENCES Shoe(shoe_id),
    FOREIGN KEY (color_id) REFERENCES Color(color_id)
);
Run Code Online (Sandbox Code Playgroud)

SQL语句:

SELECT *
    FROM shoe_color AS sc
        INNER JOIN Shoe AS s ON  sc.shoe_id = s.shoe_id
        INNER JOIN Color AS c ON  sc.color_id = c.color_id
        GROUP BY c.name
;
Run Code Online (Sandbox Code Playgroud)

解决这个问题的方法是创建一个主颜色表,将该表与鞋表连接起来,并设置一个条件来检查主颜色是否包含在数组中。从长远来看,这要复杂得多且缓慢。如果您正在创建网站,这些搜索的性能将会受到影响。