如何从mysql中使用逗号分隔符获取数据

如何从mysql中使用逗号分隔符获取数据,mysql,sql,database,Mysql,Sql,Database,我有一个表,在这个表中,每行包含一些列,每列包含逗号分隔的值,如: column1 | column2 | column3 ------------------------------------------ 1,2,3,4,5 | abc,xyz,pqr,std,bca | etc. 现在我需要将每行转换为5行,例如: 1st row like col1 1 col2 abc col3 ........ 2nd row like col1 2 col2 x

我有一个表,在这个表中,每行包含一些列,每列包含逗号分隔的值,如:

 column1   |  column2            | column3
 ------------------------------------------
 1,2,3,4,5 | abc,xyz,pqr,std,bca |  etc.
现在我需要将每行转换为5行,例如:

1st row like col1 1 col2 abc col3 ........
2nd row like col1 2 col2 xyz col3.........
3st row like col1 3 col2 pqr col3 ........
4nd row like col1 4 col2 std col3.........
5st row like col1 5 col2 bca col3 ........

我怎样才能做到这一点呢?

这是可能的,但很混乱

SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(column1, ',', units.i + tens.i * 10), ',', -1) AS col1,
        SUBSTRING_INDEX(SUBSTRING_INDEX(column2, ',', units.i + tens.i * 10), ',', -1) AS col2,
        SUBSTRING_INDEX(SUBSTRING_INDEX(column3, ',', units.i + tens.i * 10), ',', -1) AS col3,
        SUBSTRING_INDEX(SUBSTRING_INDEX(column4, ',', units.i + tens.i * 10), ',', -1) AS col4
FROM sometable
CROSS JOIN (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9)units
CROSS JOIN (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9)tens
假设一行的所有列包含相同数量的逗号分隔字段,这将处理多达100个逗号分隔字段

我使用DISTINCT来消除重复项(按照substring_index的工作方式,如果逗号分隔的值少于100个,那么最后一个值将重复,直到有100个),但您可能希望原始表的唯一键也位于select中,以避免合法的重复项。另一种方法是计算行中字段中逗号分隔值的数量,并添加where子句以根据此计数检查生成的数字


在实时代码中执行此操作可能是一个非常糟糕的主意,但如果您正在将现有表转换为新格式以供将来使用,则可能是值得的。

您所需的输出不太清晰请告诉我您可以在何处创建数据的可视化表示。这会让事情变得明朗起来。不管是谁给你留下了这样的烂摊子,你都可以随意伤害他。不过,我们还是喜欢挑战:-)但我认为最好在应用程序代码中解决这个问题。