Maison >base de données >tutoriel mysql >Comment diviser efficacement des listes séparées par des virgules dans MySQL ?
Diviser des listes séparées par des virgules dans MySQL
Pour gérer des données non normalisées avec des listes séparées par des virgules, il existe deux approches : rejoindre ou insérer dans une nouvelle table.
Rejoindre Approche :
CREATE TEMP TABLE UNIQUE_MATERIALS AS SELECT DISTINCT TRIM(MATERIAL) AS MATERIAL FROM PART_TABLE;
SELECT p.part_id, m.material_id FROM PART_TABLE p JOIN UNIQUE_MATERIALS m ON p.MATERIAL LIKE CONCAT('%', m.MATERIAL, '%');
Insérer une approche :
CREATE TABLE SPLIT_MATERIALS (part_id INT, material_id INT); INSERT INTO SPLIT_MATERIALS (part_id, material_id) VALUES (339, 1), (339, 2), (970, 2);
INSERT INTO SPLIT_MATERIALS (part_id, material_id) SELECT part_id, STR_TO_INT(TRIM(SUBSTR(MATERIAL, pos - 1, INSTR(MATERIAL, ',', pos) - pos + 1))) FROM PART_TABLE, (SELECT @pos := 1) AS vars, (SELECT INSTR(MATERIAL, ',')) AS tmp WHERE STR_TO_INT(SUBSTR(MATERIAL, @pos - 1, INSTR(MATERIAL, ',', @pos) - @pos + 1)) IS NOT NULL AND INSTR(MATERIAL, ',', @pos) > 0 GROUP BY part_id, STR_TO_INT(SUBSTR(MATERIAL, @pos - 1, INSTR(MATERIAL, ',', @pos) - @pos + 1)) ORDER BY part_id, SUBSTR(MATERIAL, @pos - 1, INSTR(MATERIAL, ',', @pos) - @pos + 1);
Une fois la nouvelle table remplie, elle peut être jointe à la table d'origine pour les requêtes qui nécessitent les valeurs séparées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!