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!