Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> users/groups rekursywnie
jacekplacek123
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 13.02.2011

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


tabela users
  1. id
  2. ...

tabela groups
  1. id
  2. ...

tabela przypisań
  1. g_id
  2. group_id NULL
  3. user_id NULL

g_id - grupa do której przypisujemy albo usera, albo inną grupę
1, NULL, 6 - przypisanie usera o id 6 do grupy o id 1
2, 1, NULL - przypisanie grupy o id 1 do grupy o id 2
Teraz user 6 należy do grupy 1 oraz 2 (do grupy 2 poprzed przypisanie grupy 1->2)

W skrajnym przypadku może być tak, że user będzie należał do kilkudziesięciu grup, a te grupy do kolejnych grup, kolejne do kolejnych i tak dalej.
Potrzebuję wyciągnąć wszystkie grupy do których należy user (łącznie z tymi, do których należy poprzez przysanie grup do innych grup)
Schemat musi być w miarę uniwersalny - nie może wykorzystywać rozwiązań dostępnych tylko w jednym systemie DB
Wolałbym uniknąć dodatkowej tabeli pomocniczej, w której trzymałbym przypisania user -> grupa, czyli w podanym wyżej przypadku
6, 1
6, 2

Jakieś pomysły jak to rozwiązać?
Szukam albo odpowiedniego zapytania (oczywiście nie, że wyciągamy najpierw pierwszy level przypisań, potem kolejny i kolejny, każdy osobnym zapytaniem, bo to będzie zabójcze)
albo jakiegoś pomysłu, jak przebudować strukturę bazy, żeby łatwo można było to wyciągnąć
Go to the top of the page
+Quote Post
gothye
post
Post #2





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

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


Miałem wcześniej podobny problem z hierarchią grup w tworzeniu uprawnień ACL z możliwością dziedziczenia uprawnień z rodzica ,rozwiązanie idealnym okazało się zastosowanie drzewa MPTT , gdzie za pomocą jednego zapytania jestem wstanie wyciągnąć uprawnienia ,i przynależność do grup użytkownika


--------------------
Nie udzielam pomocy poprzez PW
Go to the top of the page
+Quote Post
by_ikar
post
Post #3





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Tabela pomocnicza jest moim zdaniem najłatwiejszym wyjściem. A taką tabelę pomocniczą łączysz z tabelą grup za pomocą join'a. A join to nie jest wymysł mysql, czy jakiejś innej bazy danych, tylko jest to klauzula języka sql. Jeżeli jakaś baza implementuje język sql (mysql, sqlite, mssql, pgsql, orcale itp), to będzie taki join działał w takiej bazie.

Sam z takiego rozwiązania korzystam, zarówno na sqlite, jak i na mysql.
Go to the top of the page
+Quote Post
jacekplacek123
post
Post #4





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 13.02.2011

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


gothye,
takiego rozwiązania używam w innych miejscach, ale albo coś przegabiłem, albo tutaj tego nie da się zastosować.
W moim przykładzie grupa może mieć kilku rodziców, a to chyba wyklucza MPTT

by_ikar,
w ostateczności coś takiego zastosuję, ale szukam czegoś na wzór MPTT z tą różnicą, że element może mieć kilku rodziców
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 Aktualny czas: 20.08.2025 - 04:55