[MySQL] Wyciąganie danych z tabel many-to-many |
[MySQL] Wyciąganie danych z tabel many-to-many |
28.02.2017, 10:46:12
Post
#1
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 1 Dołączył: 7.05.2005 Ostrzeżenie: (0%) |
Jak wyciągnąć możliwie w jednym zapytanie listę użytkowników wraz ze wszystkimi ich rolami? |
|
|
28.02.2017, 10:49:08
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
select * from users
left join roles_users ... left join roles .... -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
28.02.2017, 10:59:19
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
A po co ci w zasadzie tabela roles_users? ja bym dał od razu role_id w users.
-------------------- |
|
|
28.02.2017, 11:01:16
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
@viking pewnie cie zaskocze, ale czasami dobrze jest, by user mogl nalezec do kilku rol a nie tylko jednej
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
28.02.2017, 11:14:40
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Zgadza się, ale w większości przypadków wystarcza dobrze rozplanowana ACLka z dziedziczeniem ról (którego to w tabeli nie widać). Ale to tylko strzelam bo może faktycznie takie są wymagania jak mówisz.
-------------------- |
|
|
28.02.2017, 11:16:35
Post
#6
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
Nie wiem jakie parzol ma wymagania. Wiem natomiast ze uzywa Kohana i struktura tabel jaka ma zostala narzucona przez modul Auth
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
28.02.2017, 13:10:04
Post
#7
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 1 Dołączył: 7.05.2005 Ostrzeżenie: (0%) |
Nie wiem jakie parzol ma wymagania. Wiem natomiast ze uzywa Kohana i struktura tabel jaka ma zostala narzucona przez modul Auth Dokładnie. Tabele zostały narzucone i nie chcę tego zmieniać. Nie dyskutowałbym na temat zasadności. Aktualnie moje zapytanie wygląda więc tak:
Jak z tego mogę wyciągnąć Role? |
|
|
1.03.2017, 08:12:33
Post
#8
|
|
Grupa: Moderatorzy Postów: 6 070 Pomógł: 860 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza |
W zasadzie zapytanie, które zbudowałeś, wyciąga to co oczekujesz, tj. wszystkich użytkowników wraz z ich rolami. Dane zwraca w postaci:
Kod użytkownik1 | rola1 użytkownik1 | rola2 użytkownik1 | rola3 użytkownik2 | rola1 a zapewne oczekiwałbyś np. tak: Kod użytkownik1 | rola1, rola2, rola3 użytkownik2 | rola1 Musisz zatem zastosować GROUP_CONCAT oczywiście w połączeniu z GROUP_BY. W Kohanie ogarniesz to w ten sposób. I na koniec 2 rady: 1. Jawnie podawaj kolumny, które Cię interesują. Twoje zapytanie zwróci przykładowo wartość pod indeksem id. Będzie to identyfikator rekordu. Pytanie tylko z której tabeli: users czy może roles? 2. Pomyśl nad rodzajem złączenia tabel. W przypadku gdy użytkownik nie będzie miał przypisanej żadnej roli nie otrzymasz go w wyniku swojego zapytania. Może aplikacja nie dopuszcza takiej możliwości, ale sama baza już tak więc trzeba to odpowiednio obsłużyć. |
|
|
1.03.2017, 08:38:20
Post
#9
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 1 Dołączył: 7.05.2005 Ostrzeżenie: (0%) |
phpion - jak zwykle rządzisz!
|
|
|
Wersja Lo-Fi | Aktualny czas: 25.04.2024 - 03:13 |