Ver Mensaje Individual
  #2 (permalink)  
Antiguo 10/12/2014, 09:13
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: consulta de fechas con between

Cita:
Será que estoy formulado mal la consulta sql.
No necesariamente, pero tiene todo el aspecto d eun problema de datos.
hay dos condiciones en tu query, y para ponerla limpia usando INNER JOIN en lugar de JOIN implícito. Te recomiendo que los evites.
Código MySQL:
Ver original
  1.   C.cedula,
  2.   C.fecha_inicial,
  3.   C.nombre,
  4.   C.apellido1,
  5.   C.apellido2,
  6.   C.telefono,
  7.   C.valor_credito,
  8.   C.tasa_interes,
  9.   C.valor_interes,
  10.   C.total_pagar,
  11.   F.estado,
  12.   F.abono_interes,
  13.   F.mes  
  14. FROM clientes C INNER JOIN facturas F ON C.cedula = F.cedula  
  15. WHERE F.estado='Al dia'
  16.    AND  C.fecha_inicial BETWEEN '".$fecha_inicial."' AND '".$fecha_final."'
En primer lugar: ¿Realmente estás almacenando en la columna "estado" una cadena de texto que dice eso? No parece una condicion muy práctica, ya que es suceptible a errores, si ese dato se almacena manualmente... ¿Lo consideraste?
Por otro lado, la fecha, ese BETWEEN sólo funcionará si la columna es un DATE o DATETIME (nunca un VARCHAR), y además la fecha está en un formato "AAAA-MM-DD"
¿Eso se cumple?

Para ver si realmente anda por alli la cosa sería mejor que hicieras una prueba manual de este tipo:
1. Verificar si la query base devuelve datos:
Código MySQL:
Ver original
  1.   C.cedula,
  2.   C.fecha_inicial,
  3.   C.nombre,
  4.   C.apellido1,
  5.   C.apellido2,
  6.   C.telefono,
  7.   C.valor_credito,
  8.   C.tasa_interes,
  9.   C.valor_interes,
  10.   C.total_pagar,
  11.   F.estado,
  12.   F.abono_interes,
  13.   F.mes  
  14. FROM clientes C INNER JOIN facturas F ON C.cedula = F.cedula
2. Verificar si hay registros con estado buscado:
Código MySQL:
Ver original
  1.   C.cedula,
  2.   C.fecha_inicial,
  3.   C.nombre,
  4.   C.apellido1,
  5.   C.apellido2,
  6.   C.telefono,
  7.   C.valor_credito,
  8.   C.tasa_interes,
  9.   C.valor_interes,
  10.   C.total_pagar,
  11.   F.estado,
  12.   F.abono_interes,
  13.   F.mes  
  14. FROM clientes C INNER JOIN facturas F ON C.cedula = F.cedula  
  15. WHERE F.estado='Al dia'
3. Buscar si hay registros en un rango, pero hacerlo sin uso de variables:
Código MySQL:
Ver original
  1.   C.cedula,
  2.   C.fecha_inicial,
  3.   C.nombre,
  4.   C.apellido1,
  5.   C.apellido2,
  6.   C.telefono,
  7.   C.valor_credito,
  8.   C.tasa_interes,
  9.   C.valor_interes,
  10.   C.total_pagar,
  11.   F.estado,
  12.   F.abono_interes,
  13.   F.mes  
  14. FROM clientes C INNER JOIN facturas F ON C.cedula = F.cedula  
  15. WHERE C.fecha_inicial BETWEEN '2014-11-11' AND '2014-12-10'
Comentanos qué devuelve cada una.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)