MySQL - Condiciones multiples en query

 
Vista:
sin imagen de perfil
Val: 95
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Condiciones multiples en query

Publicado por yaney (31 intervenciones) el 04/04/2018 10:35:42
Hola a todos
Tengo una consula en la que quisiera estableces varias condiciones para que me liste determinados campos

es una tabla en la que quiero que si el valor del campo remarketing es 'si' y si las fechas están entre el rango seleccionado me liste esos campos.

esta es mi query, el problema es que solo me lista los registros que estan en el rango de tiempo seleccionado pero no me filtra por el campo remarketing, es decir esta condicion no me la tiene en cuenta.

"SELECT appuntamento.num_ordine,cliente.cognome,cliente.nome,cliente.idcliente,cliente.cellulare,appuntamento.servizio,appuntamento.operatore,appuntamento.acconto,appuntamento.prezzototale,DATE_FORMAT(appuntamento.sed1, '%d-%m-%Y') AS sed1,DATE_FORMAT(appuntamento.sed2, '%d-%m-%Y') AS sed2,DATE_FORMAT(appuntamento.sed3, '%d-%m-%Y') AS sed3,DATE_FORMAT(appuntamento.sed4, '%d-%m-%Y') AS sed4,appuntamento.orased1,appuntamento.orased2,appuntamento.orased3,appuntamento.orased4,appuntamento.zonacorpo,appuntamento.tipolavoro,appuntamento.remarketing,DATE_FORMAT(appuntamento.data, '%d-%m-%Y') as data FROM cliente inner join appuntamento on appuntamento.clienteid=cliente.idcliente WHERE remarketing LIKE 'si' AND sed1 BETWEEN '$start_date' AND '$end_date' OR sed2 BETWEEN '$start_date' AND '$end_date' OR sed3 BETWEEN '$start_date' AND '$end_date' OR sed4 BETWEEN '$start_date' AND '$end_date' order by operatore";

Agradezco de antemano
Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Condiciones multiples en query

Publicado por leonardo_josue (414 intervenciones) el 04/04/2018 16:17:24
Hola Yaney:

Este es un "error" típico de MySQL al mezclar condiciones tipo AND y tipo OR sin considerar la jerarquía de operadores. Al igual que en matemáticas, el operador de multiplicación (*) y el operador de suma (+) NO TIENEN LA MISMA JERARQUÍA, por lo tanto el resultado de una operación en donde se usen ambos a la vez puede variar dependiendo de la posición del estos signos, es decir:

si tienes esto:

1
1 + 2 * 3 = 7

esto significa que PRIMERO DE EJECUTA LA MULTIPLICACIÓN de 2 * 3 y al resultado se le suma 1, esto es porque la multiplicación tiene una jerarquía más grande que la suma... si quisieras que se ejecutara primero la suma, entonces DEBES DE ALTERAR LA JERARQUÍA DE OPERADORES, UTILIZANDO PARÉNTESIS:

1
(1 + 2) * 3 = 9

Lo mismo sucede con los operadores AND y OR, ya que el operador AND TIENE MAYOR JERARQUÍA QUE EL OR. esto quiere decir que no es lo mismo

1
Campo1 = 1 OR campo2 = 2 AND campo3 = 3

a usar paréntesis:

1
(Campo1 = 1 OR campo2 = 2) AND campo3 = 3

Finalmente, NO ES RECOMENDABLE QUE UTILICES COMPARACIONES LIKE SI NO VAS A BUSCAR PATRONES DE CADENAS, en tu caso, estás buscando el valor de SI en el campo REMARKETING, pero sin usar comodines como (%) o (_), por lo tanto es mejor utilizar el operador = en lugar de LIKE. De tal suerte, que creo que tu condición debería de quedar así:

1
2
3
4
5
6
7
8
9
...
 WHERE
 remarketing = 'si'
 AND
 (   sed1 BETWEEN '$start_date' AND '$end_date'
  OR sed2 BETWEEN '$start_date' AND '$end_date'
  OR sed3 BETWEEN '$start_date' AND '$end_date'
  OR sed4 BETWEEN '$start_date' AND '$end_date')
 order by operatore

Haz la prueba y nos comentas y si continuas con problemas, postea algunos datos de ejemplo de tus tablas, para ver qué es lo que está mal.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 95
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Condiciones multiples en query

Publicado por yaney (31 intervenciones) el 04/04/2018 16:27:45
Muchas gracias, era eso, la jerarquía, me faltaban los ().
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar