01/09/2009, 11:38
|
Colaborador | | Fecha de Ingreso: marzo-2008 Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 9 meses Puntos: 300 | |
Respuesta: Consulta con 4 fechas He creado una tabla con los campos fechainic, fechafin y tarifa (adapta las consultas a los nombres de tus campos).
Además, donde yo escribo 2009/01/30 debes escribir la fecha primera del formulario o la variable, y donde escribo 2009/02/15, la última.
Comprueba los detalles de días, haciendo diversas pruebas. Si las tarifas son consecutivas y no se solapan días, creo que funcíonará:
Una propuesta que te saca los días de cada tarifa.
SELECT fechainic, fechafin, tarifa, CASE WHEN '2009/01/30' <= fechainic AND '2009/02/15' <= fechafin THEN DATEDIFF('2009/02/15',fechainic) +1 WHEN '2009/01/30' >= fechainic AND '2009/02/15' >= fechafin THEN DATEDIFF(fechafin,'2009/01/30') +1 WHEN '2009/01/30' <= fechainic AND '2009/02/15' >= fechafin THEN DATEDIFF(fechafin,fechainic) +1 WHEN '2009/01/30' >= fechainic AND '2009/02/15' >= fechafin THEN DATEDIFF(fechafin,'2009/01/30') +1 WHEN '2009/01/30' >= fechainic AND '2009/02/15' <= fechafin THEN DATEDIFF('2009/02/15','2009/01/30') +1 END días FROM `tarifas` WHERE '2009/01/30' <= fechafin AND '2009/02/15' >= fechainic
La que saca el precio final
SELECT SUM(T1.tarifa * t1.días) preciofinal FROM (SELECT fechainic, fechafin, tarifa, CASE WHEN '2009/01/30' <= fechainic AND '2009/02/15' <= fechafin THEN DATEDIFF('2009/02/15',fechainic) +1 WHEN '2009/01/30' >= fechainic AND '2009/02/15' >= fechafin THEN DATEDIFF(fechafin,'2009/01/30') +1 WHEN '2009/01/30' <= fechainic AND '2009/02/15' >= fechafin THEN DATEDIFF(fechafin,fechainic) +1 WHEN '2009/01/30' >= fechainic AND '2009/02/15' >= fechafin THEN DATEDIFF(fechafin,'2009/01/30') +1 WHEN '2009/01/30' >= fechainic AND '2009/02/15' <= fechafin THEN DATEDIFF('2009/02/15','2009/01/30') +1 END días FROM `tarifas` WHERE '2009/01/30' <= fechafin AND '2009/02/15' >= fechainic)T1
Naturalmente, esto puede hacerse con programación, pero eso deberías preguntarlo en el foro PHP. |