![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 7.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Przeszukałem forum i internet w poszukiwaniu pomocy, ale albo nie udało mi się trafić na odpowiednie wyjaśnienie, albo po prostu nie potrafię go zrozumieć.Jestem bardzo początkujący tak w tematyce php jak i MySql więc z góry proszę o wyrozumiałość (IMG:style_emoticons/default/smile.gif) Najbardziej zbliżonym problemem do mojego jaki odnalazłem a forum jest ten wątek: Temat: Skladowanie danych w tabeli many to many Niestety nie bardzo mogę się doszukać odpowiedzi jakiej poszukuję. Przechodząc do meritum: Mam dwie tabele: Operatorzy: | id | nick | imie | avatar ------------------------------------------------- | 1 | sushi | bartek | stuff/sushiAv.jpg ------------------------------------------------- | 2 | lolek | zbigniew | stuff/lolekAv.jpg itd. Oraz tabele Misje która przechowuje nazwę misji i ścieżkę do ikonki. | id | nazwa | ikona --------------------------------------- | 1 | misja1 | stuff/misja1.jpg --------------------------------------- | 2 | misja2 | stuff/misja2.jpg --------------------------------------- | 3 | misja3 | stuff/misja3.jpg --------------------------------------- | 4 | misja4 | stuff/misja4.jpg --------------------------------------- itd Zarówno operatorów jak i misje przybywa i może ich dodawać admin z panelu admina. Z tym nie mam problemów. Nie wiem natomiast jak admin mógł by przypisywać dane misje do danego operatora + jak wyświetlić je na stronie? Z tego co udało mi się doczytać powinienem mieć trzecią tabelę w której połączył bym rekordy ale nie bardzo wiem jak by to miało wyglądać, przy założeniu, że jeden operator może mieć np przypisane trzy różne misje a drugi dwie (w zależności od tego w których brał udział) Na mój chłopski rozum trzecia tabela powinna wyglądać mniej więcej tak (zakładając że operator Sushi brał udział w misji1, misji2 i misji4, a operator lolek w misji2 i misji3): | id | nick | nazwa | ikona --------------------------------------- | 1 | sushi | misja1 | stuff/misja1.jpg --------------------------------------- | 2 | sushi | misja2 | stuff/misja2.jpg --------------------------------------- | 3 | sushi | misja4 | stuff/misja4.jpg --------------------------------------- | 4 | lolek | misja2 | stuff/misja2.jpg --------------------------------------- | 5 | lolek | misja3 | stuff/misja3.jpg --------------------------------------- Tyle że zakładając że mam 20 operatorów, a każdy brał udział minimum w 4 misjach w różnych kombinacjach i liczba ta nadal się powiększa, miał bym przeogromną tabelę. z rozsianymi po całej długości nickami. Tabela w stylu: | id | nick | nazwa | ikona | nazwa | ikona | nazwa | ikona też raczej nie wchodzi w grę bo było by mnóstwo pustych pól i nawet nie wyobrażam sobie jak dodawać misje dla poszczególnych nicków (ale może się mylę..). Poza tym, podczas dodawania/edycji danych z panelu admina za każdym razem musiały by być tworzone rekordy w dwóch różnych bazach. Koniec końców stronie chcę osiągnać nastepujący wynik: Zdjęcie Avatara Nick: Sushi Imię: Bartek Brał udział w misjach: misja1, misja2, misja4 Czytałem o tabelach relacyjnych w nadziei że doznam oświecenia, ale chyba bez łopatologicznego wyjaśnienia nie ejstem w stanie tego zrozumieć. Ten post edytował bp.sushi 7.05.2012, 16:28:26 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 6 Dołączył: 3.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
latwiej bedzie Ci to ugryzc z 2 strony czyli- niech tabela misji przechowuje jeszcze jedna kolumne- liste osob ktore braly w niej udzial...
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
Po tym podsumowaniu na dole to mniej więcej zrozumiałem. O ile dobrze myślę to potrzebne Tobie są tylko dwie tabelki
Tabela użytkownicy: id | nick | imie | avatar i tabela Misje: | idM | nick | NazwaMisji|Ikona Będziesz tworzył relację pomiędzy tabelami według nicku,dlatego musi on być niepowtarzalny dla każdego użytkownika.Tzn, w tabeli użytkownicy,każdy będzie musiał mieć inny nick. Ten post edytował Niktoś 7.05.2012, 16:43:31 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 7.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
A co w przyadku kiedy dana misja bedzie przypisana do kilku operatorów (jak w przypadku misji2)?
Kilka nicków w kolumnie Nick tabeli Misje? Jak wyciągnąć taki rekord i go wyświetlić dla danego operatora? Cały cymes polega na tym, by admin przy edycji danego operatora mógł wybrać misje (jedną lub wiele) z listy już dostępnych i przypisać je do konkretnego "nicku" może łatwiej będzie zrozumieć o co mi chodzi na już istniejącej stronce, do której na razie dodaję wszystko "ręcznie" edytując html. www.tog.com.pl -> ludzie Ten post edytował bp.sushi 7.05.2012, 16:52:56 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
Będziesz miał efekt taki:
idM | nick | NazwaMisji|Ikona 1 operator1 misjaA png 2 operator1 misjaB png 3 operator1 misjaC png 4 operator2 misjaA png 5 operator2 misjaD png Operator 1-będzie zawierał misjeA,misjeB,misjeC Operator2- będzie zawierał misjeA i misjeD Aha chesz ,żeby misje się nie powtarzały?To sprawdzasz w tej tabeli czy taka misja już jest i nie zapisujesz rekordu do tabeli. Ten post edytował Niktoś 7.05.2012, 16:53:41 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Przecież tutaj będziesz mieć najzwyklejszą relację wiele-do-wielu, tj. trzy tabele: OPERATORZY (id, nick, ...), MISJE (id, nazwa, ...), OPERATORZY_MISJE (id_operatora, id_misji).
Google: https://www.google.com/search?sourceid=chro...ql+many-to-many |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 7.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
czyli to co opisałem w pierwszym poscie jako trzecia tabela?
Nie przeszkadza więc "ogrom" danych jakie będą tam przechowywane? Crozin: dzięki za podpowiedź, na pewno doczytam czego jeszcze nie przeczytałem, choć tak jak pisałem puki co niewiele z tego rozumiem bez "łopatologii" (uprzedzałem że jestem laikiem (IMG:style_emoticons/default/smile.gif) ) Ten post edytował bp.sushi 7.05.2012, 16:58:00 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 282 Pomógł: 89 Dołączył: 12.04.2011 Ostrzeżenie: (0%) ![]() ![]() |
To jest klasyczna sytuacja implementacji relacji wiele do wielu przy pomocy tabeli łączącej.
Tworzysz tabelę dajmy na to misje_operatorzy, w której przechowujesz jedynie id operatorów i misji i żadnych danych więcej, jeśli dana para operator - misja może występować tylko raz to powinno to wyglądać tak:
A następnie łączysz te tabele JOINAMI by uzyskać pożądany wynik, przykładowo:
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 08:25 |