La base de données que j'ai créée il y a 15 ans était mal conçue. J'ai une colonne varchar contenant des chaînes séparées par des virgules : '5,8,13'. La chaîne ne contient pas d'espaces ni de virgules finales, mais le nombre de valeurs est variable. Ce que je veux faire, c'est créer une nouvelle table et déplacer ces valeurs associées à l'ID de la ligne dans la nouvelle table. En supposant que la valeur ci-dessus provient de la ligne portant l'ID 7, le résultat sera de 3 lignes :
[ {7, 5} {7, 8} {7, 13} ]
En regardant l'ensemble de données existant, la colonne a des valeurs allant de 1 à 6. J'ai trouvé un fil de discussion qui montre comment utiliser la fonction de fractionnement de chaîne : Diviser la valeur d'un champ à deux
Mais franchement, je ne sais pas comment traduire cela en une seule opération d'insertion. Si ce n'est pas une tâche simple, j'écrirai simplement un script PHP, même s'il comportera de nombreuses instructions d'insertion.
Pour expliquer davantage, voici deux tableaux :
create table Table_A( id int auto_increment primary key, platforms varchar(255) ) create table Table_B( id int auto_increment primary key, platform int not null )
Table_A correspond aux données existantes, où les données dans la colonne des plates-formes sont les nombres « 3,45 » ou « 56,4 » séparés par des virgules. Ces nombres pointent vers un index dans une autre table. Oui, je sais que c'est une mauvaise conception, heureusement, j'ai appris une meilleure méthode depuis. Je souhaite analyser les nombres de la chaîne de plate-forme de Table_A et les insérer dans Table_B avec l'ID de la ligne Table_A.
Voici une petite requête pour réaliser cette fonctionnalité. Il ne sépare que 6 valeurs du CSV. S'il y a plus de valeurs d'affilée, vous devez changer UNION ALL
Les résultats sont stockés dans une table unique.