Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Pomoc se sql dotazem

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...

Předmět Autor Datum
v tomto případě jsi IMHO zbytečně přenormalizoval. Kdybys měl jen jednu tabulku users-groups a typ u…
touchwood 13.09.2013 21:15
touchwood
Ahoj, takto jsem DB už dostal a už se to nebude/nemůže měnit...musím si poradit s tímto stavem...:-|
n.u.r.v. 13.09.2013 21:36
n.u.r.v.
select přes tři tabulky, tabulka s uživateli bude vždy na levé straně a použiješ left join na obě zb…
touchwood 13.09.2013 22:00
touchwood
select pr.* from prijemci pr left join uzivatele uz on uz.id = pr.id_prijemce where pr.typ_prijemce…
wam_Spider007 14.09.2013 02:37
wam_Spider007
pripadne: select * from prijemci pr left join uzivatele uz on uz.id = pr.id_prijemce and pr.typ_pri…
wam_Spider007 14.09.2013 02:47
wam_Spider007
Ahoj, díky moc - vyzkouším během dne...
n.u.r.v. 14.09.2013 11:30
n.u.r.v.
Ahoj, ještě koukám, že tam někde chybí podmínka na id v příjemcích... Pro jistotu přikládám soubor,… poslední
n.u.r.v. 14.09.2013 14:42
n.u.r.v.

v tomto případě jsi IMHO zbytečně přenormalizoval. Kdybys měl jen jednu tabulku users-groups a typ určil příznakem, tak jsi celý problém mohl zredukovat velmi jednoduše tak, že hledáš-li usera i skupinu, selektuješ stále na stejný parametr.

edit: samozřejmě netuším, k čemu chceš tu databázi používat a co všechno má "umět". Někdy ale je výhodné si trochu "zaoptimalizovat" s designem.

select pr.*
from prijemci pr

left join uzivatele uz
on uz.id = pr.id_prijemce

where pr.typ_prijemce <> 'b'

union all

select pr.*
from prijemci pr

left join skupiny sk
on sk.id = pr.id_prijemce

where pr.typ_prijemce = 'b';

pripadne:

select *
from prijemci pr

left join uzivatele uz
on uz.id = pr.id_prijemce
and pr.typ_prijemce <> 'b'

left join skupiny sk
on sk.id = pr.id_prijemce
and pr.typ_prijemce = 'b';

potom uz si len niekde, kde to zobrazujes budes musiet spravne vybrat dane atributy, nakolko riadky pre uzivatelov budu mat prazdne pole pre nazov skupiny a riadky pre skupiny zase prazdne polia pre meno a priezvisko.

Zpět do poradny Odpovědět na původní otázku Nahoru