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...
Pomoc se sql dotazem
- Václav Sedlář
- Žlutá karta Bazar

-
- Registrován: 01. dub 2006
- Bydliště: Liberec
- Kontaktovat uživatele:
- senik88
- Začátečník

- Registrován: 11. led 2009
- Bydliště: Všestary
- Kontaktovat uživatele:
Re: Pomoc se sql dotazem
Asi bych to řešil procedurou:
a následně pak volal jen:
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.
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;
Kód: Vybrat vše
select vrat_jmeno(id_prijemce);
Intel Core i7-4930k + SilentiumPC Grandis 2 | Gigabyte GA-X79-UP4 | Kingston HyperX 16 GB DDR3 1866 MHz (4x4 GB) | AMD Radeon RX Vega 56 + Raijintek Morpheus II | SSD Intel 520 240 GB + Crucial MX300 1TB | Corsair HX620 | Fractal Design Define R6 | HP LP2475w + HP ZR22w | HyperX Alloy FPS Pro | Gigabyte M8000X
- yuri.cs
- Mírně pokročilý

- Registrován: 03. led 2007
- Bydliště: hl.m. piva
- Kontaktovat uživatele:
Re: Pomoc se sql dotazem
no jinak, nez proceduralne (PL) to asi ani nepujde, kdyz tam je rozhodovani, vysledky s ruznym poctem sloupcu, atd.
It will be amazing in case after 10GHz we will see 20GHz, 30GHz and so on, just like we witnessed the thorny way from 10MHz to 33MHz in the eighties. -xbitlabs.com
- Václav Sedlář
- Žlutá karta Bazar

-
- Registrován: 01. dub 2006
- Bydliště: Liberec
- Kontaktovat uživatele:
Re: Pomoc se sql dotazem
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
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