Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z zapytaniem wiele do wielu
grzesiek_g
post 21.03.2008, 01:18:29
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


--------------------
Warsztat: Ubuntu 12.10, PHPStorm
http://vertoo.pl
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
nevt
post 21.03.2008, 07:43:49
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


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
grzesiek_g
post 21.03.2008, 09:42:01
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).


--------------------
Warsztat: Ubuntu 12.10, PHPStorm
http://vertoo.pl
Go to the top of the page
+Quote Post
nevt
post 21.03.2008, 09:54:42
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ć... smile.gif
  1. ... GROUP BY users.user_id ...


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
grzesiek_g
post 21.03.2008, 10:03:05
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.


--------------------
Warsztat: Ubuntu 12.10, PHPStorm
http://vertoo.pl
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 16:07