Maison >base de données >tutoriel mysql >Comment puis-je effectuer efficacement plusieurs recherches de chaînes dans MySQL ?

Comment puis-je effectuer efficacement plusieurs recherches de chaînes dans MySQL ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-11 19:36:42550parcourir

How Can I Efficiently Perform Multiple String Searches in MySQL?

Utilisez la fonction MySQL find_in_set() pour la recherche multi-chaînes

La fonction find_in_set() de MySQL ne peut rechercher qu'une seule chaîne à la fois. Cependant, dans les applications pratiques, il est souvent nécessaire de rechercher plusieurs chaînes en même temps.

Par exemple :

<code class="language-sql">find_in_set('a', 'a,b,c,d')</code>

Ici, « a » est la seule chaîne de recherche. Si vous souhaitez rechercher plusieurs chaînes, telles que « a,b,c », vous pouvez utiliser la méthode suivante :

<code class="language-sql">find_in_set('a', 'a,b,c,d') OR find_in_set('b', 'a,b,c,d') OR find_in_set('c', 'a,b,c,d')</code>

Cette méthode utilise l'opérateur OR pour combiner plusieurs appels find_in_set(). Cependant, une solution plus efficace existe :

<code class="language-sql">WHERE CONCAT(",", `setcolumn`, ",") REGEXP ",(val1|val2|val3),"</code>

Cette méthode ajoute des virgules au début et à la fin du champ « setcolumn » pour la correspondance de modèles d'expressions régulières. Parmi eux :

  • Les valeurs dans 'setcolumn' sont représentées par ",a,b,c,d,".
  • L'expression régulière ',(val1|val2|val3)' correspond à la sous-chaîne 'a', 'b' ou 'c' dans la chaîne ',a,b,c,d,'.

Cette astuce recherche efficacement les lignes dont 'setcolumn' contient toutes les chaînes spécifiées, offrant une alternative plus flexible et plus efficace aux multiples appels find_in_set().

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