¿Como arreglar esta consulta?
Publicado por Yazo (1 intervención) el 11/08/2008 22:47:46
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
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
Valora esta pregunta


0