
13/06/2008, 07:53
|
 | | | Fecha de Ingreso: octubre-2004 Ubicación: Bahía Blanca - Argentina
Mensajes: 332
Antigüedad: 20 años, 4 meses Puntos: 1 | |
DESAFIO: Consulta imposible Gente: solicito ayuda.
Tenemos las siguientes tablas (sólo pondrè los campos que nos interesan)
consultores:
id, nombre
visitas
id_consultor, fecha, horas
tarifas
id_consultor, valor, fecha1, fecha2
ahora bien. Cuando se hace una consulta para ver las horas de determinado consultor en todos los proyectos entre dos fechas, se ejecuta la consulta:
SELECT DATE_FORMAT(visitas.fecha, '%d-%m-%Y') AS fechaf, visitas.*,
proyectos.titulo, proyectos.cliente, consultores.nombre, clientes.nombre as nomcli
FROM visitas
inner join clientes on proyectos.cliente=clientes.id
inner join proyectos on proyectos.id=visitas.proyecto
inner join consultores on consultores.id=visitas.id_consultor
WHERE visitas.id_consultor='$consultor'
AND visitas.fecha between '$fecha1a' and '$fecha2a' group by visitas.id
Bien. Si el consultor sòlo tiene una tarifa cargada en su historial, los valores de tarifas serán:
id_consultor=1, valor=$50, fecha1=2008-01-01, fecha2=0000-00-00
el càlculo serìa el total de cantidad de horas de las visitas obtenidas como resultado en la consulta anterior, multiplicado por valor ($50).
Se podrìa hacer como:
SELECT sum(horas) as totalhoras FROM visitas where visitas.fecha between '$fecha1a' and '$fecha2a' and id_consultor='$consultor' order by $orden"
y ese resultado se multiplica por valor ($50) y listo.
Ahora, si en el historial de tarifas hubo varias, lo que tenemos es un registro así:
id_consultor=1, valor=$50, fecha1=2008-01-01, fecha2=2008-02-01
id_consultor=1, valor=$60, fecha1=2008-02-02, fecha2=2008-03-01
id_consultor=1, valor=$70, fecha1=2008-03-02, fecha2=0000-00-00
entonces, la consulta tendrìa que poder discriminar el período 1 (entre 2008-01-01 y 2008-02-01), cotejarlo con las fechas dadas para el càlculo ($fecha1a y $fecha2a), calcular la cantidad de horas en visitas de esa fecha, y multiplicarlo por el valor asignado en esa època.
luego lo mismo con el siguiente período, y asì sucesivamente....
Alguna idea de cómo hacerlo????? |