consulta mysqli, LIKE e E na mesma consulta não funciona como deveria

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

  •  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:)

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top