Ver Mensaje Individual
  #4 (permalink)  
Antiguo 12/06/2009, 17:00
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Problemas con between

DATE() es una función que convierte un string en una fecha, o bien devuelve la parte de fecha de un DATETIME.
El problema puede ser de lógica:
Si el contenido de la variable de fecha es un DATE, entonces tu sentencia no te devolverá los valores posteriores a la hora 00:00:00 que puedan figurar en el campo A.fecha, por cuanto CURDATE() transformado a DATETIME contiene la hora cero y no el momento actual si es posterior. En ese caso es mejor usar NOW(), que sí te devuelve el DATETIME del momento actual.
Hay que recordar que las funciones de fecha pueden tener comportamientos erráticos dependiendo de la versión de MYSQL usada (3, 4, o 5). Por ello, es mejor usar los tipos de columna correctos, o de lo contrario la migración puede no devolver lo que se espera (la versión 4 contenía muchos bugs respecto de las funciones de fecha).
Yendo al caso, yo probaría:
Código sql:
Ver original
  1. SELECT
  2.     A.numPeticion,  
  3.     A.fecha,  
  4.     P.nombre,  
  5.     P.apepat,  
  6.     P.apemat  
  7. FROM paciente P INNER JOIN historiaClinica H USING(idPaciente)
  8.           INNER JOIN atencion A USING(idPaciente)
  9. WHERE A.fecha BETWEEN '{$fecha}' AND NOW();
Esto debería devolver los registros comprendidos entre la fecha de $fecha y el momento actual del server.
Por otro lado, hay que resolver con lógica la secuencia de tablas: Debes poner las tablas en el mismo orden de llenado verificable y usar LEFT JOIN si una de las tablas puede que no contenga el idPaciente, o de lo contrario no será listado.
Recuerda: El uso del INNER JOIN exige que todas las tablas del FROM contengan el dato de enlace, o sino los registros no aparecerán.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)