2012-06-13 3 views
0

Je veux sélectionner les lignes où la condition est vraie. J'ai une colonne nommée command, et si la valeur de la colonne contient des chaînes définies (par moi), ajouter au résultat.mysql - pourquoi la requête sql sélectionne des valeurs inutiles?

Mon problème est de sélectionner les lignes, car la requête ne voit pas l'instruction WHERE, elle sélectionne toutes les données si la colonne command contient la chaîne. Par exemple, j'ai 3 comptes administrateur: Admin, Zuppa, Grund. Je veux sélectionner toutes les données par le compte ADMIN si la colonne de commande contient: aznot ou hango.

Qu'est-ce que je fais mal?

+0

Avec cette requête, que retourne exactement. –

+0

Quel genre de résultats obtenez-vous? –

Répondre

2

Vous avez besoin de parenthèses.

SELECT * 
FROM `admin_log` 
WHERE `admin_log`.`user` = 'Admin' 
AND (command LIKE '%aznot%' OR command LIKE '%hango%') 
ORDER BY `order_id` 
DESC LIMIT 0, 50 
1
SELECT * FROM `admin_log` WHERE `admin_log`.`user` = 'Admin' 
AND (command LIKE '%aznot%' OR command LIKE '%hango%') 
ORDER BY `order_id` DESC LIMIT 0, 50 
1

Essayez quelque chose comme ceci:

SELECT * FROM `admin_log` WHERE `admin_log`.`user` = 'Admin' AND (command LIKE '%aznot%' OR command LIKE '%hango%') ORDER BY `order_id` DESC LIMIT 0, 50 
1

Il est préférable pratique de séparer les déclarations OU dans une expression distincte, afin d'éviter une mauvaise interprétation par le moteur.

SELECT * FROM `admin_log` WHERE `admin_log`.`user` = 'Admin' AND (command LIKE '%aznot%' OR command LIKE '%hango%') ORDER BY `order_id` DESC LIMIT 0, 50 
1
SELECT * 
FROM `admin_log` 
WHERE `admin_log`.`user` = 'Admin' 
     AND (command LIKE '%aznot%' 
     OR command LIKE '%hango%') 
ORDER BY `order_id` DESC 
LIMIT 0, 50 
1

vous devez bien imbriquer les conditions. voir les règles de priorité pour les opérateurs logiques dans SQL

Questions connexes