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
输出将是:
黑、白、红白、红蓝、蓝
我想成为 :
黑、白、红、蓝
任何想法?谢谢..
我建议问题是你有一个数组存储在字段中,这几乎从来都不是一个好主意。
如果您正处于项目的开发阶段,我建议将其放在 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)
解决这个问题的方法是创建一个主颜色表,将该表与鞋表连接起来,并设置一个条件来检查主颜色是否包含在数组中。从长远来看,这要复杂得多且缓慢。如果您正在创建网站,这些搜索的性能将会受到影响。