web-dev-qa-db-fra.com

Utiliser OR dans LIKE Query dans MySQL pour comparer plusieurs champs

J'ai toujours pensé que vous pouviez utiliser OR dans une instruction LIKE pour interroger des choses dans MySQL. Donc, si je voulais comparer plusieurs champs consécutifs à 1 mot clé ou terme:

SELECT * FROM MyTable WHERE Column1 OR Column2 LIKE '%keyword%'; 

et si j'avais un tableau de mots à comparer:

SELECT * FROM MyTable WHERE Column1 OR Column2 LIKE '%keyword1%' 
AND Column1 OR Column2 LIKE '%keyword2%';

Cependant, je ne pense pas que la syntaxe soit correcte. Existe-t-il une méthode efficace pour écrire ceci en dehors de quelque chose comme:

SELECT * FROM MyTable WHERE Column1 LIKE '%keyword1%' OR Column2 LIKE 
'%keyword1%' AND Column1 LIKE '%keyword2%' OR Column2 LIKE '%keyword2%';

Suis-je en train de faire ça correctement?

17
RCNeil

Utilisez ceci::

SELECT * FROM MyTable WHERE (Column1 LIKE '%keyword1%' OR Column2 LIKE 
'%keyword1%') AND (Column1 LIKE '%keyword2%' OR Column2 LIKE '%keyword2%');
29
Sashi Kant

Le plus proche de la syntaxe que vous désirez est:

SELECT * FROM MyTable
WHERE (CONCAT(Column1, Column2) LIKE '%keyword1%')
AND (CONCAT(Column1, Column2) LIKE '%keyword2%')

Remarque: le "%" au début de votre chaîne de recherche empêche l'utilisation d'index. S'il y a un grand nombre d'enregistrements à rechercher, il serait préférable de repenser l'implémentation.

22
Mazrick