Ver Mensaje Individual
  #2 (permalink)  
Antiguo 13/04/2013, 16:46
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Optimizar consulta

Considerando que todas las subconsultas llevan los mismos parámetros, con excepción de uno, y ese sólo es el relevante para la cuenta, simplemente contaría ese. Además, me sorprendería que no estuviese devolviendo errores de sintaxis.
Yo lo podria así:
Código MySQL:
Ver original
  1.     IF(E > 0, E, '') EJECUCION,
  2.     IF(S > 0, S, '') SUSPENDIDO,
  3.     IF(M > 0, M, '') MORA,
  4.     IF(P > 0, P, '') PROBLEMA
  5. FROM    
  6.     (SELECT
  7.         COUNT(IF(cc.ID_SITUACION = 18, cc.ID_CONTRATO,0)) E,
  8.         COUNT(IF(cc.ID_SITUACION = 19, cc.ID_CONTRATO,0)) S,
  9.         COUNT(IF(cc.ID_SITUACION = 39, cc.ID_CONTRATO,0)) M,
  10.         COUNT(IF(cc.ID_SITUACION = 46, cc.ID_CONTRATO,0)) P
  11.     FROM
  12.         contrato c
  13.         INNER JOIN especialidad e ON e.ID_ESPECIALIDAD = c.ID_ESPECIALIDAD
  14.         INNER JOIN departamento d ON d.ID_DEPARTAMENTO = e.ID_DEPARTAMENTO
  15.     WHERE
  16.         d.NOMBRE_CORTO = '".$this->getNombre_corto_departamento()."'
  17.         AND c.ID_TIPO_CONTRATO = '".$this->getId_tipo_contrato()."') TABLA;
Por cierto, un sano consejo es jamás pongas subconsultas en el SELECT si puedes evitarlo. Son desastrosas para la performance, porque se ejecutan una vez por cada registro devuelto en la consulta principal, por lo que el resultado en realidad podría estar siendo calamitoso...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)