mysqli query, LIKE y AND en la misma consulta no funciona como debería

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

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

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top