Maison  >  Article  >  base de données  >  Comment joindre des données de plusieurs tables avec des valeurs délimitées dans MySQL sans lier les tables ?

Comment joindre des données de plusieurs tables avec des valeurs délimitées dans MySQL sans lier les tables ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-01 09:31:30880parcourir

How to Join Data from Multiple Tables with Delimited Values in MySQL Without Linking Tables?

Joindre des données de plusieurs tables à l'aide de valeurs délimitées dans MySQL

Question :

Comment peut-on Je récupère efficacement les données de plusieurs tables dont les valeurs sont séparées par des points-virgules dans l'une des colonnes, sans utiliser de langages externes ni introduire de table de liaison ?

Réponse :

À Pour résoudre ce problème, nous pouvons utiliser une technique qui convertit les valeurs séparées par des points-virgules en lignes individuelles. Cela nous permet de joindre les tables et d'obtenir le résultat souhaité.

Solution :

La solution fournie utilise deux fonctions MySQL personnalisées :

  • COUNT_IN_SET(haystack, delim) : renvoie le nombre d'éléments délimités par des caractères dans une chaîne donnée.
  • VALUE_IN_SET(haystack, delim, which) : traite le liste délimitée sous forme de tableau et récupère la valeur à un index spécifié (lequel).

Ces fonctions sont combinées avec une jointure entre les tables utilisateur et ressource, en utilisant la table des séries entières pour parcourir le point-virgule- valeurs séparées :

<code class="sql">SELECT user_resource.user, 
       resource.data

FROM user_resource 
     JOIN integerseries AS isequence 
       ON isequence.id <= COUNT_IN_SET(user_resource.resources, ';') /* normalize */

     JOIN resource 
       ON resource.id = VALUE_IN_SET(user_resource.resources, ';', isequence.id)      
ORDER BY
       user_resource.user,  resource.data</code>

Cette requête aboutit à un tableau où les ressources de chaque utilisateur sont représentées sous forme de lignes individuelles, ce qui nous permet de nous joindre facilement à la table des ressources pour obtenir les données correspondantes.

Informations supplémentaires :

  • La table des séries entières contient une séquence de valeurs utilisées pour normaliser les listes délimitées.
  • Les fonctions COUNT_IN_SET et VALUE_IN_SET peuvent être réutilisées dans d'autres scénarios où les listes délimitées doivent être traitées.
  • Pour les bases de données SQLite, une solution similaire est disponible : https://stackoverflow.com/a/24750820/302036

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