Mysql
 sql >> Base de données >  >> RDS >> Mysql

Clause Mysql LIKE et mots séparés dans un champ

Vous pouvez utiliser une REGEXP pour faire correspondre n'importe lequel des mots de votre chaîne de recherche :

select *
from tbl
where
  title REGEXP CONCAT('[[:<:]](', REPLACE('Acme burger', ' ', '|'), ')[[:>:]]')

Veuillez noter que cela ne sera pas très efficace. Voir violon ici .

Si vous devez faire correspondre chaque mot de votre chaîne, vous pouvez utiliser une requête comme celle-ci :

select *
from tbl
where
  title REGEXP CONCAT('[[:<:]]', REPLACE('Acme burger', ' ', '[[:>:]].*[[:<:]]'), '[[:>:]]')

Violon ici . Mais les mots doivent être dans le bon ordre (par exemple, 'Acme burger' correspondra, 'burger Acme' ne le sera pas). Il existe une REGEXP pour faire correspondre chaque mot dans n'importe quel ordre, mais elle n'est pas prise en charge par MySql, sauf si vous installez une UDF qui prend en charge l'expression régulière Perl.