Autor Zpráva
Martin82
Profil *
Caute, peru se s tim uz nejaky hodiny, tak snad mi poradi nekdo tady...

Mam tri tabulky:
1. project
2. zakazka (maji polozku projekt, kterou je jednoznacne urceno pod jaky projekt spadaji - coz. je id projektu)
3. lide_cis (tabulka - id, uzivatel, projekt (id projektu), prava)

Muj ukol je vyhledat vsechny zakazky uzivatele 24 !!!

Příklad mého dotazu:
SELECT z.* FROM zakazka z, project p, lide_cis l where p.id=z.projekt and l.projekt=p.id and l.uzivatel=24 order by z.nazev

Problem je pokud mam dva zaznamy v tabulce lide_cis - takto =>
id|uzivatel|projekt|prava
1|24|11|'klient'
2|24|11|'manager'

Potom mi ze SELECTu vyleze zakazka, kde je uzivatel c.24, dvakrat (je tam klientem i managerem).
Zkousel jsem to obejit pres prikaz DISTINCT, ale kdyz spustim dotaz, spadne mi cela DB (coz samozrejme nevim proc - Lost connection)

Muzete mi teda nejak pichnout? ;)
MzM
Profil
a to je špatně, že je tam klientem i managerem?
Můžeš to udělat tak, že práva budeš mít v nějaké tabulce, kde k danému právu (roli) dáš nějakou váhu, nebo práva poskládáš tak, aby tuto váhu zastupovalo ID. Pak vybereš roli (právo) s nejvyšší váhou.
Nebo si necháš vylistovat všechna práva a někde jinde zjišťuješ, jestli je tam to správné právo. Tohle se mi zdá rozumnější třeba z pohledu, že může být admin sekce1 i admin sekce 2 a tyhle role jsou nezastupitelné.
Martin82
Profil *
a to je špatně, že je tam klientem i managerem?
No spatne to neni, ona situace, kdy uzivatel systemu bude zaroven klient i manager asi nenastane, ale pro jistotu, by to melo slapat ;)

Kazdopadne dik za rady, zkusim popremyslet nad Tvymi navrhy ;)

Spise me zarazi, ze to padne pri pridani prikazu DISTINCT - bylo by to pro me asi nejjednodussi reseni...
Kajman_
Profil *
tak použijte group by nebo vnořený select

SELECT z.* FROM zakazka z where z.projekt in (select projekt from lide_cis where uzivatel=24) order by z.nazev
Martin82
Profil *
Super diky... a tak jednoduche, ze me to nenapadlo :)
Toto téma je uzamčeno. Odpověď nelze zaslat.

0