El problema es simple, pero no es el único problema.
Lo que sucede es que no estás escribiendo bien las condiciones del WHERE, o no manejas correctamente la lógica proposicional.
Un OR es una clausula disyuntiva, es decir que parte en dos las condiciones enunciadas, donde cada parte de las condiciones se evalúa como TRUE/FASE por si misma. Esto hace que además sea incluyente, si cada una de las condiciones es TRUE, el resultado de esa condición se incluye en el resultado final.
Tal y como lo escribiste:
lo que le pides al MySQ es que te devuelva:
1) Los registros que contengan "guitarra electrica" y la fecha sea de agosto de este año.
2) Todos los registros de septiembre de este año.
3) Todos los registros de octubre de este año.
Como ves, en los últimos tres casos no estás discriminando si el tipo es o no una guitarra eléctrica...
Ese problema se resuelve muy fácilmente: Las tres condiciones de fecha se ponen entre paréntesis para que se consideren como unidad lógica:
ASí si funcionaría.
Pero no es el único
error de lógica. El segundo, más grave es que
no se usa el LIKE para buscar fechas. Jamás.
El LIKE es para búsquedas de
cadenas de texto, no para fechas.
Una fecha no es una cadena de texto y al usar el LIKE debe ser convertida a texto, lo cual no es ni necesario ni una buena idea.
Una fecha es un escalar, no un texto. Es una magnitud y como tal susceptible de ser
medida y comparada por rangos, por lo que se debe usar otro tipo de operadores para hacerlo.
En este caso, lo que correspondería sería:
o bien
Como puedes suponer, YEAR() devuelve el año de una fecha y MONTH el numero de mes. Tan sencillo como eso.
De hecho, la consulta también podría escribirse:
Posdata: No etiquetes el código SQL como PHP, no es lo mismo.
En el combo de los Highlights están las etiquetas correctas. Úsalas.