Maison > base de données > tutoriel mysql > Comment puis-je joindre efficacement des tables avec des valeurs séparées par des virgules dans une base de données MySQL ?

Comment puis-je joindre efficacement des tables avec des valeurs séparées par des virgules dans une base de données MySQL ?

Linda Hamilton
Libérer: 2024-12-27 14:17:16
original
581 Les gens l'ont consulté

How Can I Efficiently Join Tables with Comma-Separated Values in a MySQL Database?

Joindre des tables avec des valeurs séparées par des virgules dans une seule colonne

Lorsque vous travaillez avec des bases de données, il est souvent nécessaire de joindre des tables basées sur des colonnes contenant des virgules -valeurs séparées. Dans ce cas précis, vous essayez de récupérer des noms d'utilisateur pour lesquels une colonne séparée par des virgules dans le tableau C (« ID utilisateur ») correspond à un terme de recherche spécifique.

Requête SQL utilisant l'extraction de sous-chaînes

Votre requête initiale a tenté d'utiliser une sous-requête pour extraire la première valeur de la chaîne séparée par des virgules dans la colonne « ID utilisateur » du tableau C. Cependant, cette approche est inefficace et peu fiable car elle suppose que la valeur souhaitée est toujours la première de la chaîne.

Requête améliorée à l'aide de find_in_set

Une meilleure solution consiste à utiliser La fonction find_in_set de MySQL, qui vous permet de rechercher une valeur spécifique dans un espace séparé par des virgules. string :

SELECT *
FROM tblC c
JOIN tblB b ON (find_in_set(b.userid, c.userids) > 0)
WHERE c.nname = "new1"
Copier après la connexion

Cette requête récupérera efficacement tous les noms d'utilisateur associés aux lignes du tableau C où la colonne "nname" correspond à "new1".

Alternative au schéma normalisé

Cependant, il est important de noter que stocker des valeurs séparées par des virgules dans une colonne n'est pas une pratique recommandée. Pour une meilleure intégrité des données et de meilleures performances, il est préférable de normaliser le schéma en introduisant une table de jonction.

Dans l'exemple fourni, vous pouvez créer une nouvelle table de jonction (tblC_user) avec deux colonnes : c_id (clé étrangère de la table C) et l'ID utilisateur (clé étrangère de la table B). Cela vous permettra de représenter la relation plusieurs-à-plusieurs entre les tables C et B sans avoir besoin de chaînes séparées par des virgules.

Requête normalisée

Utilisation de la relation normalisée schéma, vous pouvez utiliser la requête suivante pour récupérer les résultats souhaités :

SELECT *
FROM tblC c
JOIN tblC_user cu ON (c.id = cu.c_id)
JOIN tblB b ON (b.userid = cu.userid)
WHERE c.nname = "new1"
Copier après la connexion

Cette requête fournira un et fiable pour joindre des tables basées sur des valeurs séparées par des virgules.

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