Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z zapytaniem wiele do wielu
grzesiek_g
post
Post #1





Grupa: Zarejestrowani
Postów: 249
Pomógł: 30
Dołączył: 18.07.2007

Ostrzeżenie: (0%)
-----


Witam

Mam trzy tabele:

users
+id
username

users_roles
+user_id
+role_id

roles
+id
name

i zapytanie:
  1. SELECT users.*,
  2. GROUP_CONCAT(DISTINCT roles.name ORDER BY roles.name SEPARATOR ', ' ) AS rolenames
  3. FROM users_roles INNER JOIN users ON users_roles.user_id = users.id
  4. INNER JOIN roles ON users_roles.role_id = roles.id
  5. GROUP BY users_roles.user_id

Wszystko jest w porządku jeśli id użytkownika z tabeli users ma swoje odzwierciedlenie w tabeli users_roles, problem gdy tak nie jest i ten user nie jest zwracany przez to zapytanie.

Moje pytanie: czy da się przerobić tak to zapytanie, by zwracało tak jak dotychczas użytkowników o id, które ma odzwierciedlenie w tabeli users_roles (a co za tym idzie jakieś przydzielone prawa z tabeli roles), oraz tych uzytkowników, którzy nie mają przydzielonych żadnych praw (nie ma ich w tabeli users_roles - a konkretnie nie ma ich id ponieważ nie posiadają żadnych praw).

Nie chciałbym robić kolejnego poziomu uprawanień - brak - bo wymagałoby to zmiany trochę linii kodu PHP.

Ten post edytował grzesiek_g 21.03.2008, 01:19:08
Go to the top of the page
+Quote Post
nevt
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


o ile cię dobrze zrozumiałem , to mniej więcej tak:
  1. SELECT users.*,
  2. GROUP_CONCAT(DISTINCT roles.name ORDER BY roles.name SEPARATOR ', ' ) AS rolenames
  3. FROM users LEFT JOIN users_roles ON users.id=users_roles.user_id
  4. LEFT JOIN roles ON users_roles.role_id = roles.id
  5. GROUP BY users_roles.user_id


Ten post edytował nevt 21.03.2008, 07:47:28
Go to the top of the page
+Quote Post
grzesiek_g
post
Post #3





Grupa: Zarejestrowani
Postów: 249
Pomógł: 30
Dołączył: 18.07.2007

Ostrzeżenie: (0%)
-----


Niestety, ale to jeszcze nie to, ponieważ zwraca:
- wszystkich użytkowników którzy mają przypisane uprawnienia,
- pierwszy napotkany rekord z grupy użytkowników którzy nie posiadają żadnych uprawnień.

Czyli przykład:
janek - redaktor
ola - brak uprawnień
marek - admin
tomek - brak uprawnień
ewa - redaktor, edytor
I to zapytanie nie zwróci mi danych użytkownika tomek (użytkownik ola zostanie wykazany prawidłowo).
Go to the top of the page
+Quote Post
nevt
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


heh - myślałem że sam wpadniesz co trzeba poprawić... (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
  1. ... GROUP BY users.user_id ...
Go to the top of the page
+Quote Post
grzesiek_g
post
Post #5





Grupa: Zarejestrowani
Postów: 249
Pomógł: 30
Dołączył: 18.07.2007

Ostrzeżenie: (0%)
-----


Ech... Dawno pisałem rozbudowane troszkę bardziej zapytania SQL i niestety nie wpadłem na to. Działa, wielkie dzięki.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 15:54