consulta mysqli, LIKE e E na mesma consulta não funciona como deveria
-
22-07-2019 - |
Pergunta
por isso esta é a minha consulta, não importa se aprovado é definido como 0 ou 1 ele vai me dar todas as linhas de qualquer maneira
SELECT *
FROM `tutorials`
WHERE tags LIKE '% php %' OR tags LIKE 'php %' OR tags LIKE '% php' OR tags = 'php'
AND approved=1
Eu acho que é por causa da OR, mas eu poderia estar errado, se alguém poderia me ajudar sobre isso:)
Solução
Tente suportes
SELECT *
FROM `tutorials`
WHERE ( tags LIKE '% php %'
OR tags LIKE 'php %'
OR tags LIKE '% php'
OR tags = 'php'
)
AND approved=1
Outras dicas
Eu acho que você está faltando alguns dois pontos:
SELECT *
FROM `tutorials`
WHERE (tags LIKE '% php %' OR tags LIKE 'php %' OR tags LIKE '% php' OR tags = 'php')
AND approved=1
A razão que você deve incluir dois pontos, é porque OR e e operadores estão no mesmo nível de precedência. Quando você omitir os dois pontos, sua consulta seria analisado como:
SELECT *
FROM `tutorials`
WHERE (tags LIKE '% php %' OR (tags LIKE 'php %' OR (tags LIKE '% php' OR (tags = 'php'
AND approved=1))))
Especialmente quando usando longas listas de OR e e operadores em uma consulta, é aconselhável a utilização de dois pontos para tornar a sua intenção clara. Para obter uma lista completa da precedência do operador em MySQL (que geralmente é comum a outros dialetos SQL), consulte manual MySQL .
Eu não conseguir o que você quer exatamente. Mas isto pode ser o que você está procurando
* SELECT FROM
tutorials
ONDE ( tags como '% php%' ou tags como 'php%' ou tags como '% php' ou tags = 'Php' ) e aprovado = 1