Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/08/2008, 14:10
yazo
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
¿Como arreglar esta consulta?

Hola chic@s,

Necesito ayuda con una consulta que estoy realizando pero me falla y no se porque es, la consulta es la siguiente:

SELECT flotas.id as idflota, flotas.nombre as nombreflota, flotas.logotipo as logoflota, coches.id as idcoche, coches.nombre as nombrecoche, coches.fotocoche as fotocoche, coches.videocoche as videocoche, rutas.nombre as nombreruta, rutas.id as idruta, rutas.ano as anoruta, rutas.opciones as opcionesruta, tarifas.mes as mestarifa,

(SELECT MIN(LEAST(if(tar.preciopromocion>0, tar.preciopromocion, 100000), if(tar.tarifa1>0, tar.tarifa1, 100000), if(tar.tarifa2>0, tar.tarifa2, 100000), if(tar.tarifa3>0, tar.tarifa3, 100000), if(tar.tarifa4>0, tar.tarifa4, 100000), if(tar.tarifa5>0, tar.tarifa5, 100000), if(tar.tarifa6>0, tar.tarifa6, 100000), if(tar.tarifa7>0, tar.tarifa7, 100000))) AS tarifamenor FROM tarifas AS tar WHERE tar.idruta='idruta' AND tar.mes='mestarifa') AS tarifamenos

FROM (((flotas INNER JOIN coches ON flotas.id=coches.idflota) INNER JOIN rutas ON coches.id=rutas.idcoche) INNER JOIN tarifas ON rutas.id=tarifas.idruta)

WHERE rutas.oculto='0'
AND flotas.oculto='0'
AND rutas.destino = '1'
AND TIMESTAMP(CONCAT(rutas.ano, '-', tarifas.mes, '-', tarifas.dia)) >= TIMESTAMP(DATE_FORMAT(NOW(),'%Y-%m-%d'))
AND rutas.ano = '2009'
AND tarifas.mes='01'
AND idruta IN (SELECT tar2.idruta AS iditi FROM tarifas AS tar2 WHERE tar2.idruta='idruta' AND tar2.completo='0' AND tar2.mes='mestarifa')

GROUP BY rutas.id

ORDER BY flotas.nombre, rutas.ano, coches.nombre, rutas.nombre


Todo funciona correctamente excepto cuando he insertado estas dos partes:
(SELECT MIN(LEAST(if(tar.preciopromocion>0, tar.preciopromocion, 100000), if(tar.tarifa1>0, tar.tarifa1, 100000), if(tar.tarifa2>0, tar.tarifa2, 100000), if(tar.tarifa3>0, tar.tarifa3, 100000), if(tar.tarifa4>0, tar.tarifa4, 100000), if(tar.tarifa5>0, tar.tarifa5, 100000), if(tar.tarifa6>0, tar.tarifa6, 100000), if(tar.tarifa7>0, tar.tarifa7, 100000))) AS tarifamenor FROM tarifas AS tar WHERE tar.idruta='idruta' AND tar.mes='mestarifa') AS tarifamenos
que saca la menor de las tarifas distintas de cero

AND idruta IN (SELECT tar2.idruta AS iditi FROM tarifas AS tar2 WHERE tar2.idruta='idruta' AND tar2.completo='0' AND tar2.mes='mestarifa')
que no muestra las rutas completas.

La consulta tarda mucho en cargar y no da ningún resultado.
¿Me podeis ayudar en como hacerlo y darme algún consejillo que veais aconsejable?

Muchas Gracias

Última edición por yazo; 11/08/2008 a las 14:18