Problème :
Dans une table non normalisée, une colonne contient une liste séparée par des virgules qui agit comme une clé étrangère vers une table distincte. Cela crée un défi lors de l’intégration des données dans un moteur de recherche dépourvu de prise en charge du langage procédural. L'objectif est de diviser cette liste en plusieurs lignes, pour finalement produire une table dénormalisée.
Solution :
Bien que MySQL ne fournisse pas de fonctions qui renvoient intrinsèquement des tables, un astucieux solution peut être mise en œuvre :
SELECT part_id, REGEXP_SUBSTR(`material`, '[^,]+', 1) AS `material_id` FROM unnormalized_table
Cette requête attribue la première valeur de la liste séparée par des virgules à la colonne Material_id, créant une nouvelle ligne pour chaque part_id.
Exemple :
L'application de cette solution à l'exemple fourni dans l'énoncé du problème donnerait ce qui suit résultats :
part_id | material_id |
---|---|
339 | 1 |
339 | 2 |
970 | 2 |
Conclusion :
En tirant parti d'une combinaison de manipulation de chaînes et de sous-requêtes, il est possible de dénormaliser les listes séparées par des virgules dans MySQL. Cette technique permet l'intégration transparente de ces données dans diverses applications qui ne prennent pas en charge les fonctionnalités avancées du langage procédural.
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!