mysqli query, LIKE y AND en la misma consulta no funciona como debería
-
22-07-2019 - |
Pregunta
así que esta es mi consulta, no importa si aprobado se establece en 0 o 1, me dará todas las filas de todos modos
SELECT *
FROM `tutorials`
WHERE tags LIKE '% php %' OR tags LIKE 'php %' OR tags LIKE '% php' OR tags = 'php'
AND approved=1
Supongo que es por el OR, pero podría estar equivocado, si alguien pudiera ayudarme en esto :)
Solución
Pruebe los corchetes
SELECT *
FROM `tutorials`
WHERE ( tags LIKE '% php %'
OR tags LIKE 'php %'
OR tags LIKE '% php'
OR tags = 'php'
)
AND approved=1
Otros consejos
Creo que te faltan algunos dos puntos:
SELECT *
FROM `tutorials`
WHERE (tags LIKE '% php %' OR tags LIKE 'php %' OR tags LIKE '% php' OR tags = 'php')
AND approved=1
La razón por la que debe incluir dos puntos, es porque los operadores OR y AND están en el mismo nivel de precedencia. Cuando omite los dos puntos, su consulta se analizará como:
SELECT *
FROM `tutorials`
WHERE (tags LIKE '% php %' OR (tags LIKE 'php %' OR (tags LIKE '% php' OR (tags = 'php'
AND approved=1))))
Especialmente cuando se usan largas listas de operadores OR y AND en una consulta, es recomendable usar dos puntos para aclarar su intención. Para obtener una lista completa de la precedencia de operadores en MySQL (que generalmente es común a otros dialectos de SQL), consulte el manual de MySQL .
No conseguí lo que quieres exactamente. Pero este puede ser el que estás buscando
SELECCIONAR * DESDE
tutoriales
DONDE ( etiquetas como '% php%' o etiquetas como 'php%' o etiquetas como '% php' o etiquetas = 'php' ) Y aprobado = 1