jak zbudowac zapytanie

0

witam
mam baze danych MySQL a w niej 2 tabele: Uzytkownicy i Uprawnienia
tabela uprawnienia wyglada tak :
'ID_uprawnienia', 'int(10) unsigned', 'NO', 'PRI', '', '
'ID_uzytkownika', 'int(10) unsigned', 'NO', 'PRI', , '
'ID_obiektu', 'int(10) unsigned', 'NO', 'PRI', ,

tabela Uzytkownicy wyglada tak :
'ID_uzytkownika', 'int(10) unsigned', 'NO', 'PRI', '', 'auto_increment'
'Login', 'varchar(45)', 'NO', , , ''
'Haslo', 'varchar(45)', 'NO', , , ''

dopuszczalne wartosci pola ID_uprawnienia to:
0 przegladanie
1 dodawanie
2 edycja
3 usuwanie

dopuszczalne wartosci pola ID_obiektu:
0 klienci
1 faktury
2 produkty
3 zamowienia
4 zlecenia
5 uzytkownicy
6 firmy

przykladowe zapytanie:
SELECT * FROM Uprawnienia right join Uzytkownicy on Uprawnienia.ID_uzytkownika=Uzytkownicy.ID_uzytkownika
group by ID_uzytkownik;

0, 1, 5, 1, 'login', 'haselko'

i teraz na czym polega problem
musze zbudowac zapytanie ktore sprawdzi w tabeli z Uprawnieniami czy uzytkownik o danym ID_uzytkownika ma prawa i jakie to sa prawa do obiektu ID_obiektu
Przykladowo
jesli uzytkownik ma prawo przegladania czyli ID_uprawnienia 1 do obiektu Klienci czyli ID_obiektu 0 to zapytanie ma zwrocic literke P
ale jesli uztkownik moze takze dodawac klientow to zapytanie ma zwrocic literki PD

trzeba uzyc pewnie GROUP BY CONCAT IF

prosze o pomoc

0

malymi kroczkami udalo mi sie rozwiac problem

select Imie, Nazwisko, Login,
group_concat(if((ID_obiektu=0) and (ID_uprawnienia=0),'P' ,''),
if((ID_obiektu=0) and (ID_uprawnienia=1),'D',''),
if((ID_obiektu=0) and (ID_uprawnienia=2),'E',''),
if((ID_obiektu=0) and (ID_uprawnienia=3),'U','')) as Klienci,
group_concat( if((ID_obiektu=1) and (ID_uprawnienia=0),'P',''),
if((ID_obiektu=1) and (ID_uprawnienia=1),'D',''),
if((ID_obiektu=1) and (ID_uprawnienia=2),'E',''),
if((ID_obiektu=1) and (ID_uprawnienia=3),'U','')) as Faktury,
group_concat( if((ID_obiektu=2) and (ID_uprawnienia=0),'P',''),
if((ID_obiektu=2) and (ID_uprawnienia=1),'D',''),
if((ID_obiektu=2) and (ID_uprawnienia=2),'E',''),
if((ID_obiektu=2) and (ID_uprawnienia=3),'U','')) as Produkty,
group_concat( if((ID_obiektu=3) and (ID_uprawnienia=0),'P',''),
if((ID_obiektu=3) and (ID_uprawnienia=1),'D',''),
if((ID_obiektu=3) and (ID_uprawnienia=2),'E',''),
if((ID_obiektu=3) and (ID_uprawnienia=3),'U','')) as Zamowienia,
group_concat( if((ID_obiektu=4) and (ID_uprawnienia=0),'P',''),
if((ID_obiektu=4) and (ID_uprawnienia=1),'D',''),
if((ID_obiektu=4) and (ID_uprawnienia=2),'E',''),
if((ID_obiektu=4) and (ID_uprawnienia=3),'U','')) as Zlecenia,
group_concat( if((ID_obiektu=5) and (ID_uprawnienia=0),'P',''),
if((ID_obiektu=5) and (ID_uprawnienia=1),'D',''),
if((ID_obiektu=5) and (ID_uprawnienia=2),'E',''),
if((ID_obiektu=5) and (ID_uprawnienia=3),'U','')) as Uzytkownicy,
group_concat(if((ID_obiektu=6) and (ID_uprawnienia=0),'P',''),
if((ID_obiektu=6) and (ID_uprawnienia=1),'D',''),
if((ID_obiektu=6) and (ID_uprawnienia=2),'E',''),
if((ID_obiektu=6) and (ID_uprawnienia=3),'U','')) as Firmy

from Uprawnienia,Uzytkownicy where Uprawnienia.ID_uzytkownika=Uzytkownicy.ID_uzytkownik group by ID_uzytkownika order by ID_uzytkownika,ID_obiektu,ID_uprawnienia;

0
  1. a jak Ci dojdzie ID_obiektu = 7 :>
  2. a jak CI dojdzie ID_uorawnienia = 4 :>
  3. a jak ktoś sobie zarzyczy nie "PDEU" tylko "ztrh"

jak dla mnie to to jest do kitu, zero logiki i tyle. Skąd wziąłeś te literki, jaki jest w ogóle tego sens jeśli ilość kolumn jest uzależniona od ilości obiektów - to już lepiej zrobić jedną tabelkę z kolumnami
Klienci, Faktury, ...
wszystkie CHAR(4) i wprost wpisywać tam znaczki

0

1 do ID_obiektu=7 nie dojdzie do dane wpisywane sa z poziomu GUI a wlasciwie nie wpisywane tylko wybierane checkboxem od 0-6
2 do ID_uprawnienia to samo

po prostu zrobiona jest tablica 2 wym checkboxow OBIEKTY x UPRAWNIENIA
wiec kazdy uzytkownik o jakims tam ID nigdy nie bedzie mial wiecej wpisow w tabeli z uprawnieniami niz 4*7 = 28 :>
3 ano dlatego tak bo tak jest okreslone w specyfikacji P - przegladanie D- dodawanie itp

1 użytkowników online, w tym zalogowanych: 0, gości: 1