0 votes

Regroupement de plusieurs requêtes MySql

J'ai une requête simple comme indiqué ci-dessous

SELECT id, name, email FROM users WHERE group_id = 1

Cela fonctionne bien jusqu'à ce que je commence à ajouter LIKE des requêtes, enchaînées avec OR les déclarations jusqu'à la fin.

SELECT id, name, email FROM users 
 WHERE group_id = 1 
   AND id LIKE $searchterm 
    OR name LIKE $searchterm 
    OR email LIKE $searchterm

Soudain, mon WHERE n'est plus maintenue et les résultats avec un 'group_id' de 2 ou 3 sont récupérés.

Y a-t-il un moyen de regrouper WHERE afin qu'elles soient toujours respectées ou est-ce que je rate quelque chose d'évident ?

2voto

OMG Ponies Points 144785

Commençons par la requête - vous devez utiliser des parenthèses pour que la clause WHERE soit interprétée correctement :

SELECT id, name, email 
  FROM users 
 WHERE group_id = 1 
   AND (    id LIKE $searchterm 
       OR name LIKE $searchterm 
       OR email LIKE $searchterm)

J'envisagerais plutôt d'utiliser la recherche en texte intégral (FTS), que vous pourriez utiliser :

SELECT id, name, email 
  FROM users 
 WHERE group_id = 1 
   AND MATCH(id, name, email) AGAINST ($searchterm)

Il faut savoir que le USERS La table doit être MyISAM...

1voto

deinst Points 8706

Je suppose que vous voulez

email FROM users WHERE group_id = 1 AND (id LIKE $searchterm OR name LIKE $searchterm OR email LIKE $searchterm)

Voici le mysql la préséance des opérateurs tableau

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X