[ Aleksandar Ružičić @ 14.02.2008. 12:10 ] @
pozdrav svima,

imam sledecu situaciju: u bazi postoje sledece tabele: tbl_users (sa poljem id, naravno postoji jos polja ali za ovu pricu je samo ovo polje u pitanju), tbl_user_permission_groups (sa poljima user_id i permission_id), tbl_permission_groups (sa poljima id, permission, value i precedence) i tabelu tbl_permissions (sa poljima id i type)

e sad, problem je u sledecem: ja treba da za svakog korisnika izvucem dozvole (iz permission_groups tabele) na sledeci nacin:

u tbl_user_permission_groups u polju user_id se nalazi id korisnika iz tbl_users tabele, a u polju permission_id id permisione grupe iz tabele tbl_permission_groups

u tbl_permission_groups se nalaze podaci o permisionim grupama, id je id grupe, permission je id dozvole iz tbl_permissions, value - vrednost dozvole (u toj grupi) i precedence (INT - 0 do 4) - "tezina" poesavanja, tj ako je korisnik clan vise permisionih grupa (sto je moguce) i ako obe grupe sadrze istu dozvolu a razlicite vrednosti (recimo u jednoj grupi je can_post podeseno na 1, sa tezinom 1, a u drugoj grupi je podeseno na 0 sa tezinom 0) onda se uzima ona vrednost koja ima vecu tezinu (u ovom slucaju ce se vratiti vrednost iz prve grupe, tj 1), ukoliko su podesavanja iste tezine onda se uzima ona druga

u tbl_permissions se nalaze sve dozvole. id - id dozvole, type - tip dozvole (INT - 0 ili 1, 0 predstavlja yes/no, 1 - brojnu vrednost)

e sad ja treba za svakog korisnika da izvucem sve dozvole koje ima podesene, znaci da "merdzujem" tih vise grupa u jedan set dozvola. ja sam ovo uradio vec ali na sledeci nacin:

- izvucem iz tbl_user_permission_groups id-eve svih grupa za trenutnog korisnika
- iz tbl_permission_groups izvucem sva podesavanja vezana za svaku od tih grupa
- iz tbl_permissions izvucem tipove dozvola
- i na kraju sve to sredim pomocu php-a

i sve radi ok, ali sad mi se blizi pustanje sajta u rad pa sam resio da optimizujem gde god je to moguce, a mislim da je ovde moguce sve ovo odraditi u jednom kveriju, samo sto meni (my)sql nije jaca strana, pa ako neko ima ideju kako da smanjim broj kverija (trenutno su tri kverija + potrebno vreme da se podaci srede u jedan niz) neka pomogne...


hvala unapred


p.s. u nekim od ovih tabela ima jos polja, za ime grupe i ime dozvole, ali to nisam naveo zbog jednostavnosti (lako cu posle srediti kveri za dodatna polja...)
[ Miroslav Ćurčić @ 20.02.2008. 12:37 ] @
Pa išlo bi ovako nekako:
Code:

SELECT value, precedence, type
FROM tbl_user_permission_groups AS UPG, tbl_permission_groups AS PG, tbl_permissions AS P  
WHERE UPG.user_id=999 AND UPG.permission_id=PG.id AND PG.permission=P.id

što će ti dati nekoliko redova s njegovim dozvolama.

Ako ti trebaju i neka od "id" polja neće moći samo "id" jer ga imaš u sve tri tabele nego ovako:
SELECT ... , PG.id AS IdGrupe , ...