Ver Mensaje Individual
  #9 (permalink)  
Antiguo 01/09/2009, 11:38
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
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.