Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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将csv从两列转换为密钥对_Mysql - Fatal编程技术网

mysql将csv从两列转换为密钥对

mysql将csv从两列转换为密钥对,mysql,Mysql,我在MySQL中有一个表,它包含两列逗号分隔的数据(ugh!),我需要重新格式化,以便第一列值的第n个索引与第二列值的第n个索引匹配 id | col1 | col2 ---------------------------------- 1 | a,b,c,d | a5,3e,7f48,943d44 结果看起来像 results -------------- a:a5 b:3e c:7f48 d:943d44 concat、group_concat、find_

我在MySQL中有一个表,它包含两列逗号分隔的数据(ugh!),我需要重新格式化,以便第一列值的第n个索引与第二列值的第n个索引匹配

id   | col1        | col2
----------------------------------
1    | a,b,c,d     | a5,3e,7f48,943d44
结果看起来像

results
--------------
a:a5
b:3e
c:7f48
d:943d44

concat、group_concat、find_in_set等似乎无法胜任这项工作;是否有与php的array_combine()等效的函数/过程?

如果没有UDF或存储过程的帮助,MySQL中没有通用的方法来实现这一点。但是,在某些假设条件下,一种近似方法是使用
子字符串索引

SELECT CONCAT(SUBSTRING_INDEX(col1, ',', 1), ':', SUBSTRING_INDEX(col2, ',', 1)) AS results
FROM yourTable
UNION ALL
SELECT CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(col1, ',', 2), ',', -1), ':',
              SUBSTRING_INDEX(SUBSTRING_INDEX(col2, ',', 2), ',', -1))
FROM yourTable
UNION ALL
SELECT CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(col1, ',', 3), ',', -1), ':',
              SUBSTRING_INDEX(SUBSTRING_INDEX(col2, ',', 3), ',', -1))
FROM yourTable
UNION ALL
SELECT CONCAT(SUBSTRING_INDEX(col1, ',', -1), ':', SUBSTRING_INDEX(col2, ',', -1))
FROM yourTable;

如果每个记录中始终有4个CSV项目,则这将起作用。如果没有,那么我们仍然可以使用这种方法,但它将开始变得非常丑陋


如果您希望有多行数据,并且还希望对输出进行排序,可以通过向查询中添加一个计算列,并使用该列执行排序。但总的来说,MySQL不适合处理此类CSV数据。如果可能的话,尽量将CSV排除在您的表格之外。

您希望每个
col1
col2
记录中有多少CSV项目?这个数字总是已知和固定的吗?请注意,对于核心MySQL函数,没有通用的方法可以做到这一点。请停止在SQL列中放置逗号分隔的列表。规范化您的数据。我可以看出这有多难看,因为数据中的行在某些行中包含更多字段。正常化意味着改变依赖这种荒谬格式的[第三方]软件。我认为对我来说,最好的办法是出口,对外加工,然后再进口。为胜利干杯answer@frumbert是的……在MySQL之外做这件事可能是更容易的选择。