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

Posted

技术标签:

【中文标题】如何在MySql中使用查询来分解字符串多种颜色并对其进行分组【英文标题】:how to explode string multiple color and group it using query in MySql 【发布时间】:2015-10-20 08:25:39 【问题描述】:

我有桌子shoes_tbl 每双鞋都有颜色有时有多种颜色 示例:

带字段:鞋子、颜色

1. shoe1, black
2. shoe2, white
3. shoe3, red white
4. shoe4, red blue
5. shoe5, white
6. shoe6, blue

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

输出将是:

黑、白、红白、红蓝、蓝

我想成为:

黑、白、红、蓝

有什么想法吗?谢谢..

【问题讨论】:

我认为您的架构没有正确使用数据库关系。您在单个单元格中编码多个关系(“红蓝”)。您可以继续使用此模式并处理数据库外部的值(空格分隔的字符串)。或者您将架构重写为shoes_tbl 和另一个表shoe_color 之间的多对多关系。 实际上我没有主颜色表,如果可以的话,我想自动显示在 shoes_tbl 中添加的列表颜色。但如果我不能在查询中做到这一点。我怎么能在 php 脚本中做到这一点.. ??谢谢.. 在 php 中你必须使用 explode() 函数来实现 php.net/manual/en/function.explode.php 根据我的建议@Vedran 是正确的,您必须更改您的架构,因为如果您在拆分之类的列上进行进一步的处理,那么当您拥有大量数据时会导致性能问题。 【参考方案1】:

我会建议问题是您在字段中存储了一个数组,这几乎不是一个好主意。

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

在第一个放鞋。在第二个放颜色。 比创建连接到前 2 个表的第三个表。

如果 3 张桌子对你来说太多了,那就做第二张(有颜色的那张) 在某种程度上,主键是 shoe_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)
);

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
;

解决此问题的一种方法是创建一个主颜色表,将该表与 鞋桌并有一个条件,您可以检查主颜色是否包含在您的数组中。 从长远来看,这更加复杂和缓慢。如果您正在制作网站,则这些搜索会影响网站性能。

【讨论】:

shoe_color TABLE SCHEMA PRIMARY KEY (id, color_id), 1Key 列 'id' 在 table1 中不存在 应该是:CREATE TABLE shoe_color ( shoe_id INT NOT NULL, color_id INT NOT NULL, PRIMARY KEY (shoe_id, color_id), FOREIGN KEY (shoe_id) REFERENCES Shoe(shoe_id), FOREIGN KEY (color_id) REFERENCES Color(color_id) ); 如果您认为答案不错,请您为答案投票。我还不能对问题发表评论,这让我很生气。谢谢 等等..所以唯一的办法就是制作颜色表.. T_T,其实我不会。因为有很多颜色的皮肤(鞋皮)..我认为你是对的。我只想要快捷方式(简单的方法).. 所以.. 我要重建我的表.. 或者如果有我不会的方法.. 我只想显示颜色列表.. 颜色太多的问题在任何一种情况下都会保持不变。如果您以某种格式(txt 或数据库)存储它,您可以解析或传输它。如果不将该工作交给站点管理员。只需将该功能添加到您的 CMS

以上是关于如何在MySql中使用查询来分解字符串多种颜色并对其进行分组的主要内容,如果未能解决你的问题,请参考以下文章

如何设置透明背景颜色并对 kivy 图像进行抗锯齿处理?

如何在mysql中获取值不为null的列名

在 MySQL / PHP 中匹配相似的字符串

如何从 MySQL 将确切的行数加载到 jTable 并对剩余的行进行分页?

如何从MySQL中将精确的行数加载到jTable并对其余的分页?

如何使用字符串数组来分解数字的各个数字?