Ver Mensaje Individual
  #6 (permalink)  
Antiguo 21/01/2013, 20:40
Agente1960
 
Fecha de Ingreso: enero-2013
Mensajes: 62
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Between de MYSQL usando PHP

Cita:
Iniciado por gnzsoloyo Ver Mensaje
La primera consulta no te devuelve datos porque en ese contexto el contenido de las variables ingresa como si fuese una operación aritmética, que el SQL resuelve.
Es decir, esto es lo que recibe:
Código MySQL:
Ver original
  1. FROM turf_poscns
  2. LEFT JOIN turf_carrr ON turf_poscns.idcarrr = turf_carrr.idcarrr
  3. LEFT JOIN turf_jockey ON turf_poscns.idjockey = turf_jockey.idjockey
  4. LEFT JOIN turf_ubiccn ON turf_ubiccn.idubiccn = turf_carrr.idubiccn
  5. WHERE turf_carrr.fecha BETWEEN 2012-01-01 AND 2013-01-10
Y esto es lo que ejecuta:
Código MySQL:
Ver original
  1. FROM turf_poscns
  2. LEFT JOIN turf_carrr ON turf_poscns.idcarrr = turf_carrr.idcarrr
  3. LEFT JOIN turf_jockey ON turf_poscns.idjockey = turf_jockey.idjockey
  4. LEFT JOIN turf_ubiccn ON turf_ubiccn.idubiccn = turf_carrr.idubiccn
  5. WHERE turf_carrr.fecha BETWEEN 2010 AND 2002
¿Se entiende?
Lo interpreta como una resta, por lo que hace la resta y los valores pasan a ser un rango sin respuestas (el rango menor/mayor está invertido y su resultado es cero).

El segundo caso debería darte resultados, porque los apostrofos se usan en SQL para encerrar cadenas de texto, con lo que MySQL las interpretará como fechas dado el formato:
Código MySQL:
Ver original
  1. FROM turf_poscns
  2.     LEFT JOIN turf_carrr ON turf_poscns.idcarrr=turf_carrr.idcarrr
  3.     LEFT JOIN turf_jockey ON turf_poscns.idjockey=turf_jockey.idjockey
  4.     LEFT JOIN turf_ubiccn ON turf_ubiccn.idubiccn=turf_carrr.idubiccn
  5.     WHERE turf_carrr.fecha Between '$FechaI' AND '$FechaF'
pero sólo te los puede dar si existe algún registro turf_poscns relacionado con un registro de turf_carrr que pueda cumplir con turf_poscns.idcarrr=turf_carrr.idcarrr y al mismo tiempo turf_carrr.fecha Between '$FechaI' AND '$FechaF', de lo contrario el valor de turf_carrr.fecha será NULL... y los NULL no devuelven datos.

¿Se entiende?
Si quieres verificarlo, haz lo siguiente:
Código MySQL:
Ver original
  1. FROM turf_poscns
  2.     INNER JOIN turf_carrr ON turf_poscns.idcarrr=turf_carrr.idcarrr
  3. WHERE turf_carrr.fecha Between '$FechaI' AND '$FechaF'
Si esto devuelve datos, la otra consulta también debe devolverlos, y el problema no sería la consulta en si.

Ahora bien, ¿el campo turf_carrr.fecha es un DATE o DATETIME, no es así?

Pregunto para asegurarme...

Use el código que me pasastes y me funciono el filtro, ¿que me sugeris que modifique o pruebe para resolver el problema en particular?