Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/05/2011, 14:09
Netyco
 
Fecha de Ingreso: enero-2005
Ubicación: Salta - Argentina
Mensajes: 322
Antigüedad: 19 años, 11 meses
Puntos: 7
Consulta sobre funciones en MySQL

Estimados, estoy trabajando con funciones y procediminentos en MySQL y me gustaria saber por favor si es que existe alguna forma de optimizar este SQL que arme...


Código PHP:

CREATE DEFINER
=`root`@`localhostPROCEDURE `Proc_usuarios_lista`(tipoSaldo int(11))
BEGIN

CASE tipoSaldo

WHEN 1 THEN
        SELECT
          yms_usuarios
.idusuario as id,
          
yms_usuarios.Nombre,
          
yms_usuarios.cuit,  
          
yms_usuarios.provincia,
          (if(
SUM(yms_ccusuarios.haber)<>0,SUM(yms_ccusuarios.haber),0))-(if(SUM(yms_ccusuarios.debe)<>0,SUM(yms_ccusuarios.debe),0)) as saldo
        FROM
          yms_usuarios
          LEFT JOIN 
`yms_ccusuarios`  ON (`yms_usuarios`.idusuario = `yms_ccusuarios`.idusuario)  
        
        
GROUP by yms_usuarios.idusuario

        ORDER BY
          yms_usuarios
.idusuario asc;


WHEN 2 THEN
        SELECT
          yms_usuarios
.idusuario as id,
          
yms_usuarios.Nombre,
          
yms_usuarios.cuit,  
          
yms_usuarios.provincia,
          (if(
SUM(yms_ccusuarios.haber)<>0,SUM(yms_ccusuarios.haber),0))-(if(SUM(yms_ccusuarios.debe)<>0,SUM(yms_ccusuarios.debe),0)) as saldo
        FROM
          yms_usuarios
          LEFT JOIN 
`yms_ccusuarios`  ON (`yms_usuarios`.idusuario = `yms_ccusuarios`.idusuario)  
        
        
GROUP by yms_usuarios.idusuario

        having saldo
>0

        ORDER BY
          yms_usuarios
.idusuario asc;


WHEN 3 THEN
        SELECT
          yms_usuarios
.idusuario as id,
          
yms_usuarios.Nombre,
          
yms_usuarios.cuit,  
          
yms_usuarios.provincia,
          (if(
SUM(yms_ccusuarios.haber)<>0,SUM(yms_ccusuarios.haber),0))-(if(SUM(yms_ccusuarios.debe)<>0,SUM(yms_ccusuarios.debe),0)) as saldo
        FROM
          yms_usuarios
          LEFT JOIN 
`yms_ccusuarios`  ON (`yms_usuarios`.idusuario = `yms_ccusuarios`.idusuario)  
        
        
GROUP by yms_usuarios.idusuario

        having saldo
<0

        ORDER BY
          yms_usuarios
.idusuario asc;          


WHEN 4 THEN
        SELECT
          yms_usuarios
.idusuario as id,
          
yms_usuarios.Nombre,
          
yms_usuarios.cuit,  
          
yms_usuarios.provincia,
          (if(
SUM(yms_ccusuarios.haber)<>0,SUM(yms_ccusuarios.haber),0))-(if(SUM(yms_ccusuarios.debe)<>0,SUM(yms_ccusuarios.debe),0)) as saldo
        FROM
          yms_usuarios
          LEFT JOIN 
`yms_ccusuarios`  ON (`yms_usuarios`.idusuario = `yms_ccusuarios`.idusuario)  
        
        
GROUP by yms_usuarios.idusuario

        having saldo
=0

        ORDER BY
          yms_usuarios
.idusuario asc;          

END CASE;
END


Mi duda esta (como se puede observar) que tengo el MISMO codigo repetido para cambiar solo la condicion que esta en having saldo=0


La pregunta es: Existe alguna forma de "optimizar esto" para de esa forma no tener que colocar el codigo tantas veces repetidas.?

Aguardo sus comentarios por favor.