Maison >base de données >tutoriel mysql >Comment diviser efficacement des listes séparées par des virgules dans MySQL ?

Comment diviser efficacement des listes séparées par des virgules dans MySQL ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-06 11:36:40511parcourir

How to Split Comma-Separated Lists in MySQL Efficiently?

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 :

  1. Créez une table temporaire contenant les valeurs uniques de la liste séparée par des virgules :
CREATE TEMP TABLE UNIQUE_MATERIALS AS
SELECT DISTINCT TRIM(MATERIAL) AS MATERIAL FROM PART_TABLE;
  1. Rejoignez la table d'origine avec le table temporaire sur la colonne MATÉRIEL pour étendre la liste dans lignes :
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 :

  1. Utilisez la commande REPLACE pour insérer de nouvelles lignes dans une nouvelle table (SPLIT_MATERIALS) :
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);
  1. Remplir la nouvelle table en itérant sur chaque valeur séparée par des virgules et insertion d'une ligne :
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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn