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
Libérer: 2025-01-06 11:36:40
original
534 Les gens l'ont consulté

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;
Copier après la connexion
  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, '%');
Copier après la connexion

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);
Copier après la connexion
  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);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal