这可能是您要查找的查询:
第一个表结构:
CREATE TABLE color (
id int AUTO_INCREMENT,
col_type varchar(255),
PRIMARY KEY (id)
);
INSERT INTO color (col_type)
VALUES(
'GREEN,RED,BLACK'
);
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(col_type, ',', 1), ',', -1) AS first_color,
If( length(col_type) - length(replace(col_type, ',', ''))>1,
SUBSTRING_INDEX(SUBSTRING_INDEX(col_type, ',', 2), ',', -1) ,NULL)
as second_color,
SUBSTRING_INDEX(SUBSTRING_INDEX(col_type, ',', 3), ',', -1) AS last_color
FROM color
结果是第一个颜色 |第二种颜色 |第三色绿色|红色|黑色
小提琴在此输入链接描述 http://sqlfiddle.com/#!2/e48e97/1
但对于超过 3 种颜色且每种颜色都有自己的顺序,我认为以下查询是正确的。
SELECT
COLOR,
SUBSTRING_INDEX(SUBSTRING_INDEX(COLOR, ',', 1), ',', -1) AS first_color,
If( length(COLOR) - length(replace(COLOR, ',', ''))>=1,
SUBSTRING_INDEX(SUBSTRING_INDEX(COLOR, ',', 2), ',', -1) ,NULL)
as second_color,
If( length(COLOR) - length(replace(COLOR, ',', ''))>=2,
SUBSTRING_INDEX(SUBSTRING_INDEX(COLOR, ',', 3), ',', -1) ,NULL)
AS third_color,
If( length(COLOR) - length(replace(COLOR, ',', ''))>=3,
SUBSTRING_INDEX(SUBSTRING_INDEX(COLOR, ',', 4), ',', -1) ,NULL)
AS fourth_color
FROM COLOR;
要知道 COLOR 字段中发生的最大连接数,您可以执行以下操作
select (length(COLOR) - length(replace(COLOR, ',', '')) as NumColors
然后使用循环根据表中的最大颜色数进行查询的 if 部分。
小提琴here http://sqlfiddle.com/#!2/90e6a/16