Stránka 1 z 1

Pomoc se sql dotazem

Napsal: pát 13. zář 2013, 13:11
od Václav Sedlář
Ahoj, potřeboval bych poradit se sql dotazem v následující situaci:

Mám následující tabulky:
pozn: tabulka(atribut)

prijemci(id,id_prijemce,typ_prijemce)
uzivatele(...,id,jmeno,prijmeni,...)
skupiny(...,id, nazev,...)

A teď mám v tabulce prijemci následující seznam:
(id,id_prijemce,typ_prijemce)
42,111,a
42,125,b
42,333,a

v tabulce uzivatele mám:
(id,jmeno,prijmeni)
111,pepa,novak
333,vaclav,sedlar

v tabulce skupiny mám:
(id,nazev)
125,xxx

A teď potřebuji udělat nějaký sql dotaz, který se podívá do tabulky prijemci vezme id_prijemce a když v typ_prijemce bude hodnota != "b" , tak uvedené id_prijemce najde v uzivatele a vezme si odtamtud jméno a příjmení

a když bude typ_prijemce "b", tak id_prijemce najde v tabulce skupiny a odtamtud vezme příslušný název...

ze seznamů příjemcu to bude brát jen ty řádky, kde bude id=předané id...

Nemáte nápad jak nejlépe to udělat? Samozřejmě, že si můžu udělat jednoduše select všech příjemců, seřadit dle typů a pak v cyklu v php udělat nejdřív selecty v uživatelích a pak v skupinách, ale nezdá se mi to moc čisté...

Poznámka - do budoucna se může stát situace, že bude víc typů, ne jen "a" a "b"

Moc díky...

Re: Pomoc se sql dotazem

Napsal: sob 14. zář 2013, 22:46
od senik88
Asi bych to řešil procedurou:

Kód: Vybrat vše

create or replace function vrat_jmeno(a_id_prijemce::int) returning text as $func$

declare

l_jmeno::text;
l_typ_prijemce::text;

begin

select into l_typ_prijemce typ_prijemce from prijemci where id_prijemce = a_id_prijemce;

if not found then

 raise exception "Uzivatel neexistuje";

else

 if l_typ_prijemce != 'b' then

  select into l_jmeno jmeno || ' ' || prijmeni from uzivatele where id_prijemce = a_id_prijemce;

 else

  select into l_jmeno nazev from skupiny where id_prijemce = a_id_prijemce;

 end if;

return l_jmeno;

end if;

end;

$func$ LANGUAGE plpgsql;
a následně pak volal jen:

Kód: Vybrat vše

select vrat_jmeno(id_prijemce);
Píšu to jen tak po paměti, takže to nemusí bejt úplně dokonalý. A je to pro postgres, pro mysql se možná bude syntaxe trochu lišit.

Re: Pomoc se sql dotazem

Napsal: ned 15. zář 2013, 17:09
od yuri.cs
no jinak, nez proceduralne (PL) to asi ani nepujde, kdyz tam je rozhodovani, vysledky s ruznym poctem sloupcu, atd.

Re: Pomoc se sql dotazem

Napsal: ned 15. zář 2013, 22:23
od Václav Sedlář
Ahoj, díky za rady...

Jen ještě upřesním: Dělám to v PHP a potřebuji dostat výsledek, jako je na přiložené ukázce: http://uloz.to/xcuZgPTd/vypsani-prijemcu-xlsx