dimecres, 26 d’octubre del 2011

Consulta SQL per veure totes les opcions d'una plantilla i quines estan marcades

Quan ens trobem que he fer una consulta d'una taula on per una determinada opció cal saber si està marcada o no, moltes vegades ho fem de la següent manera:

    ColParametres=TornaTotsElsParametres()
    for each Parametre in ColParametres
        if MiraSiElClientTeElParametreMarcat(codi_client, codi_parametre) then
            'parametre marcat
        else
            'parametre NO marcat
        endif
    next Parametre

Mostrant la taula de la següent manera:


Això comporta el problema que la funció MiraSiElClientTeElParametreMarcat() també fa un accés a la base de dades, i fem aquest accés per cada paràmetre de la llista. Per tant accedim a la base de dades tantes vegades com paràmetres tenim a la taula base.

Una millor manera de fer-ho, suposant que la taula "Paràmetres" té els camps "codi_client", "codi_parametre"; seria fent una consulta única de la següent manera:


    SELECT Codi_Parametre, Descripcio
    (SELECT Codi_Parametre FROM Parametres_Clients
    WHERE Codi_Client = 'codidelclient'
    AND codi_parametre=Parametres.Codi_Parametre) AS Codi_Parametre_Client"
    FROM Parametres

LLavors el codi quedaria com:

    if tb!Codi_Parametre_Client Is Null then
        'parametre No marcat
    else
        'parametre marcat
    endif

Cap comentari:

Publica un comentari a l'entrada