![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 13.02.2011 Ostrzeżenie: (0%) ![]() ![]() |
tabela users
tabela groups
tabela przypisań
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ąć |
|
|
![]()
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
|
|
|
![]()
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. |
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 04:55 |