如何在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 SCHEMAPRIMARY 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中使用查询来分解字符串多种颜色并对其进行分组的主要内容,如果未能解决你的问题,请参考以下文章
如何从 MySQL 将确切的行数加载到 jTable 并对剩余的行进行分页?