Requête mysqli, LIKE et AND dans la même requête ne fonctionne pas comme il se doit

StackOverflow https://stackoverflow.com/questions/1824962

  •  22-07-2019
  •  | 
  •  

Question

donc ceci est ma requête, peu importe si approuvé est défini sur 0 ou 1, il me donnera quand même toutes les lignes

SELECT * 
FROM `tutorials` 
WHERE tags LIKE '% php %' OR tags LIKE 'php %' OR tags LIKE '% php' OR tags = 'php' 
AND approved=1

Je suppose que c'est à cause de la salle d'opération, mais je peux me tromper si quelqu'un peut m'aider à ce sujet:)

Était-ce utile?

La solution

Essayez les crochets

SELECT * 
FROM `tutorials` 
WHERE   (       tags LIKE '% php %' 
            OR  tags LIKE 'php %' 
            OR  tags LIKE '% php' 
            OR  tags = 'php' 
        )
AND approved=1

Autres conseils

Je pense qu'il vous manque des deux points:

SELECT * 
FROM `tutorials` 
WHERE (tags LIKE '% php %' OR tags LIKE 'php %' OR tags LIKE '% php' OR tags = 'php')
AND approved=1

La raison pour laquelle vous devez inclure les deux points est que les opérateurs OR et AND ont le même niveau de priorité. Lorsque vous omettez les deux points, votre requête est analysée comme suit:

SELECT * 
FROM `tutorials` 
WHERE (tags LIKE '% php %' OR (tags LIKE 'php %' OR (tags LIKE '% php' OR (tags = 'php' 
AND approved=1))))

Surtout lorsque vous utilisez de longues listes d'opérateurs OR et AND dans une requête, il est conseillé d'utiliser des deux points pour préciser votre intention. Pour une liste complète de la priorité des opérateurs dans MySQL (qui est généralement commune aux autres dialectes SQL), voir le manuel MySQL .

Je n'ai pas obtenu ce que vous voulez exactement. Mais c’est peut-être celui que vous recherchez

  

SELECT * FROM tutoriels WHERE    () balises LIKE '% php%' OU balises LIKE 'php%' OU balises LIKE '% php' OU tags =   'php' ) ET approuvé = 1

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top