Ver Mensaje Individual
  #2 (permalink)  
Antiguo 16/06/2008, 11:44
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: reemplazo de consulta

No se con que lenguaje muestras la imagen, pero yo me olvidaria de la tabla1 y usaria directamente el hecho de que el campo de cada mes es 1 o 0 para mostrar una u otra imagen. Un simple if en el lenguaje de programació que uses puede mostrar la imagen roja o verde en función del valor sin que este guardada en la bbdd.

Luego una simple consulta

Código:
SELECT Propiedad, 
          Precio_Alquiler, 
          Ene, 
          Feb, 
          Mar,
          Abr,
          ... 
   from tab_abonos;
si guardas todos los cobros en el mismo registro o
si tus registros son así (un abono por registro)

Id_Propiedad___Precio_Alquiler_____Ene__Feb__Mar__ Abr...
1_____1________250________________1____0____0___0
2_____1________250________________0____1____0___0
3_____1________250________________0____0____1___0
4_____1________250________________0____0____0___0
...

luego usa

Código:
Select Propiedad, 
          Precio_Alquiler, 
          max(Ene), 
          max(Feb), 
          max(Mar),
          max(Abr),
          ...
FROM tab_abonos
GROUP BY Propiedad, Precio_Alquiler;
y en ambos casos te dará

_Propiedad___Precio_Alquiler_____Ene__Feb__Mar__Ab r...
_____1________250______________1____1____1___0

leyendo este registro se puede mostrar verde o rojo en función de si es 1 o 0:

Quim


Pero incluso me plantearia redisenyar la bbdd:

Tabla 1:tab_propiedades
tab_propiedades.idPropiedad int (PK)
tab_propiedades.Precio_Alquiler decimal

Tabla 2: tab_abonos
tab_abonos.idAbono Int (PK)
tab_abonos.idPropiedad int (FK tab_propiedades.idPropiedad)
tab_abonos.fecha date
tab_abonos.anno_abono int
tab_abonos.mes_abono int (1,2,...,12)
tab_abonos.importe_abono decimal

Con esta estructura podrias controlar pagos parciales y saber cuando han pagado cada mes.

Código:
SELECT tab_propiedades.idPropiedad,
             tab_propiedades.Precio_Alquiler,
             abonos.anno_abono,
             abonos.mes_abono,
             abonos.importe,
             if(tab_propiedades.Precio_Alquiler = abonos.importe,1,
                    if(abonos.importe<>0,2,0)) //No estoy seguro
                                                //de la sintaxis del if
FROM tab_propiedades 
      INNER JOIN
        (SELECT tab_abonos.idPropiedad,
             tab_abonos.anno_abono,
             tab_abonos.mes_abono,
             sum(tab_abonos.importe_abono) as importe
         FROM tab_abonos
         GROUP BY tab_abonos.idPropiedad,
             tab_abonos.anno_abono,
             tab_abonos.mes_abono) as abonos //sumamos abonos parciales
       ON tab_propiedades.idPropiedad=abonos.idPropiedad
ORDER BY tab_propiedades.idPropiedad,
             tab_propiedades.Precio_Alquiler,
             abonos.anno_abono,
             abonos.mes_abono;
resultado

idPropiedad__Precio_Alquiler__anno_abono__mes_abon o__importe__Abonado
____1_________250__________2008_________1________2 50______1
____1_________250__________2008_________2________2 50______1
....

Abonado 0=Pendiente de pago, 1=Pagado, 2=Pago parcial

Que con un poco de programación podrà generar el mismo output pero con una bbdd mucho mas simple, con mas informació y ocupando menos espacio...



Última edición por quimfv; 17/06/2008 a las 07:09