Maison > base de données > tutoriel mysql > 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
Libérer: 2024-11-01 09:31:30
original
1055 Les gens l'ont consulté

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

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 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