Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z zapytaniem wiele do wielu
Forum PHP.pl > Forum > Bazy danych > MySQL
grzesiek_g
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.
nevt
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
grzesiek_g
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).
nevt
heh - myślałem że sam wpadniesz co trzeba poprawić... smile.gif
  1. ... GROUP BY users.user_id ...
grzesiek_g
Ech... Dawno pisałem rozbudowane troszkę bardziej zapytania SQL i niestety nie wpadłem na to. Działa, wielkie dzięki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.