Maison  >  Article  >  base de données  >  Comment interroger efficacement une colonne séparée par des virgules pour une valeur spécifique ?

Comment interroger efficacement une colonne séparée par des virgules pour une valeur spécifique ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-03 17:02:29379parcourir

How to Efficiently Query a Comma-Separated Column for a Specific Value?

Comment interroger une colonne séparée par des virgules pour une valeur spécifique sans instructions LIKE redondantes

Les tables de base de données ont souvent des colonnes qui stockent des valeurs séparées par des virgules listes de valeurs. Pour récupérer des lignes contenant une valeur particulière, on peut utiliser des instructions LIKE. Cependant, l'utilisation de plusieurs instructions LIKE peut s'avérer fastidieuse et inefficace.

Inconvénients de l'utilisation des instructions LIKE

Dans l'exemple fourni, la table stocke les catégories sous forme de valeurs séparées par des virgules :

ID | CATEGORIES
---------------
1  | c1
2  | c2,c3
3  | c3,c2
4  | c3
5  | c4,c8,c5,c100

Pour trouver les lignes contenant "c2", on pourrait utiliser :

SELECT id FROM table WHERE categories LIKE '%c2%';

Cependant, cela correspondrait également aux lignes avec "c2" n'importe où dans la chaîne, ce qui entraînerait des faux positifs . L'utilisation de plusieurs instructions LIKE pour vérifier des combinaisons spécifiques peut être fastidieuse et sujette aux erreurs.

Approche alternative : recherche délimitée par des virgules

Une approche plus efficace consiste à utiliser une Recherche délimitée par des virgules :

select 
  * 
from
  YourTable 
where 
  ',' || CommaSeparatedValueColumn || ',' LIKE '%,SearchValue,%'

Cette requête recherche la valeur complète entourée de virgules, garantissant des correspondances exactes. Cependant, il comporte des limites car il ne suppose aucun espace ni virgule dans les valeurs.

Solution optimale : tableau de catégories séparé

Pour éviter ces limitations et améliorer les performances, il est Il est fortement recommandé de créer une table de catégories distincte liée à la table principale avec une relation plusieurs-à-plusieurs. Cela permet des requêtes et une manipulation de données efficaces sans opérations de chaîne fastidieuses ni risque de fausses correspondances.

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