![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 21.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam, rekreacyjnie robie skrypt grup (tematycznych) użytkowników
Stworzyłem to na zasadzie 2 tabel: Tabela 1 (Przechowywanie informacji o grupach): GROUPS a w niej GROUP_ID i NAME Tabela 2 (Użytkownicy): USERS a w niej ID, GROUP_ID, USERNAME Istotna jest TABELA 2, ID to oczywiście identyfikator, GROUP_ID przechowuje informacje o tym do której grupy jest zapisany użytkownik z pola USERNAME I teraz pytanko... czy są jeszcze inne metody na podobny skrypt? Zakładając ze mamy 5 grup, a w każdej po 10 zapisanych userów daje to 50 rekordów (w tabeli 2)... Zastanawiałem sie nad dodaniem do TABELI 1 pola USERS zamiast tabeli 2 i przechowywanie tam użytkowników, oddzielonych przecinkami z czego to skrypt php by ich wypisywał na ekranie w odpowiedniej formie. Nie mam problemu z kodem tylko z tym na jakiej zasadzie ma to działać... czy są jeszcze inne rozwiązania? znacie? jaka metoda jest najbardziej optymalna? Szukałem na tym forum i ogólnie w necie ale nic ciekawego nie znalazłem... moze za słabo szukam ![]() ![]() ![]() |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
jeżeli jeden użytkownik może przynależeć tylko do jednej grupy to to pierwsze rozwiązanie będzie ok, jeżeli do wielu grup to wtedy najlepiej 3 tabele: users, groups, user_group_assoc, to drugie rozwiązanie z dodanie kolumny users do groups nie jest dobre ponieważ gdybyś potrzebował pobrać jednocześnie nazwy użytkowników i nazwę grupy to już jednym zapytaniem tego nie zrobisz, a w pierwszym przypadku zrobisz to przy pomocy LEFT JOIN
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 21.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Chodzi o to żeby każdy user mógł należeć do każdej grupy
![]() ![]() |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
to wtedy 3 table w trzeciej trzymasz powiązanie użytkownika z grupą: user_id | group_id
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Opiekunowie Postów: 3 855 Pomógł: 317 Dołączył: 4.01.2005 Skąd: że ![]() |
Można by to rozwiązać jeszcze inaczej, przy stałej i znanej ilości grup, mianowicie, do dać w bazie pola z grupami jako enum('0', '1') od razu przy użytkownikach.
-------------------- Jak poprawnie zadać pytanie | Jak poprawnie zatytułować wątek
Najczęstsze błędy | Błędy E_NOTICE | PHP FAQ | FAQ PHPedia | SQL-Injection | Logowanie i sesje | Hashowanie haseł | Server - od czego zacząć ? | Manual PHP Alternatywne Forum dla Ekspertów Nie pomagam na PW, nie mam GG |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 2 Dołączył: 30.04.2010 Skąd: PL Ostrzeżenie: (0%) ![]() ![]() |
To, co chcesz wykonać jest relacją 'wiele do wielu'. Jako, że nie jest możliwe rozwiązanie tej relacji wprost, stosuje się trzy tabele: USERS, GROUPS, USERS_TO_GROUPS (nazwy nie mają oczywiście większego znaczenia) oraz stosuje się między USERS a USERS_TO_GROUPS relację 'jeden do wielu' a między USERS_TO_GROUPS a GROUPS 'wiele do jednego'.
USERS: pola: id, imie, nazwisko, ... GROUPS: pola: id, nazwa, ... USERS_TO_GROUPS: pola: id, user_id, group_id Do łączenia stosujesz polecenie JOIN http://dev.mysql.com/doc/refman/5.0/en/join.html http://forum.php.pl/index.php?showtopic=83702 Rozwiązanie z dodatkowymi polami nie jest skalowalne i dlatego bym raczej tego unikał. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 13:33 |