Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 选择“从单个DB行中为每个结果返回一个单词”_Mysql - Fatal编程技术网

Mysql 选择“从单个DB行中为每个结果返回一个单词”

Mysql 选择“从单个DB行中为每个结果返回一个单词”,mysql,Mysql,我有一个带有列id和别名的DB表 我需要获得单个标签的列表,即选择。。。从颜色返回如下形式的结果: 1 => green 2 => red 2 => maroon 2 => sunset 3 => blue 3 => navy 是否有一种直接在SQL中拆分/解组别名值的方法?在不改变数据库结构和代码的情况下,最好的方法是什么 更新 不幸的是,这是一个无法轻易更改的系统,我们没有资源重写所有连接的系统/API。。。所以也许有人知道这种情况下一个好的/有效的解决

我有一个带有列id和别名的DB表

我需要获得单个标签的列表,即选择。。。从颜色返回如下形式的结果:

1 => green
2 => red
2 => maroon
2 => sunset
3 => blue
3 => navy
是否有一种直接在SQL中拆分/解组别名值的方法?在不改变数据库结构和代码的情况下,最好的方法是什么

更新


不幸的是,这是一个无法轻易更改的系统,我们没有资源重写所有连接的系统/API。。。所以也许有人知道这种情况下一个好的/有效的解决方案。

我有一个0-9的整数表

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,alias VARCHAR(100) NOT NULL
);

INSERT INTO my_table VALUES
(1,'green'),
(2,'red maroon sunset'),
(3,'blue navy');

SELECT DISTINCT x.id
              , SUBSTRING_INDEX(SUBSTRING_INDEX(x.alias,' ',i.i+1),' ',-1) alias 
           FROM my_table x
              , ints i -- my integers table
          ORDER 
             BY id
              , i;
+----+--------+
| id | alias  |
+----+--------+
|  1 | green  |
|  2 | red    |
|  2 | maroon |
|  2 | sunset |
|  3 | blue   |
|  3 | navy   |
+----+--------+

实际上,您应该更改数据库结构。您的表未正常化。切勿在一列中存储多个值!谢谢你的反馈。我知道不同的数据库结构将是最好的解决方案。不幸的是,我们没有修改DB的选项。在这种情况下,上面的示例被简化了,而不是真正的DB内容
DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,alias VARCHAR(100) NOT NULL
);

INSERT INTO my_table VALUES
(1,'green'),
(2,'red maroon sunset'),
(3,'blue navy');

SELECT DISTINCT x.id
              , SUBSTRING_INDEX(SUBSTRING_INDEX(x.alias,' ',i.i+1),' ',-1) alias 
           FROM my_table x
              , ints i -- my integers table
          ORDER 
             BY id
              , i;
+----+--------+
| id | alias  |
+----+--------+
|  1 | green  |
|  2 | red    |
|  2 | maroon |
|  2 | sunset |
|  3 | blue   |
|  3 | navy   |
+----+--------+