Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Tworzenie historii - problem
Frugo75
post
Post #1





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

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


Witam ponownie,

Powoli zbliżam się do końca prac, ale znów mam wydaje się banalny problem, ale na który nie potrafię znaleźć rozwiązania.

Mam tabele w bazie "rosters", w której takie dane:
  1. id player_id position_id team_id club_id league_id
  2. 363 24 6 2 6 NULL
  3. 367 28 6 2 20 NULL
  4. 368 26 7 2 6 NULL
  5. 359 27 5 2 20 NULL
  6. 358 33 5 2 6 NULL
  7. 353 31 7 45 5 NULL
  8. 352 25 6 45 5 NULL
  9.  


i dane z tej tabeli chcę sobie raz na jakiś czas przenosić do tabeli "teams_history", która wyglada tak:

  1. id team_id round_id player_1 player_2 player_3 player_4 player_5 player_6


Chcę pobrać z "rosters" team_id i wpisac do "teams_history " do player_1 , player_2 ....itd zawodników, których ma w tabeli rosters ów team_id. (nie wiem czy nie zamieszałem).
Proszę o pomysł jak to rozwiązać.

Go to the top of the page
+Quote Post
Kshyhoo
post
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Może ten artykuł Cię natchnie wink.gif


--------------------
Go to the top of the page
+Quote Post
ghost1511
post
Post #3





Grupa: Zarejestrowani
Postów: 186
Pomógł: 18
Dołączył: 2.09.2010

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


Wygląda na to że źle sobie zaprojektowałeś bazę. Dwa błędy jakie widzę to to, że w tabeli historycznej trzymasz stałą liczbę zawodników. Zawsze wynosi 6? Po drugie po co przenosić te same dane do innej tabeli? Nie lepiej utworzyć jakiś widok który będzie korzystał z pierwszej tabeli?
Go to the top of the page
+Quote Post
Frugo75
post
Post #4





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

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


Cytat(ghost1511 @ 28.03.2014, 13:03:53 ) *
Wygląda na to że źle sobie zaprojektowałeś bazę. Dwa błędy jakie widzę to to, że w tabeli historycznej trzymasz stałą liczbę zawodników. Zawsze wynosi 6? Po drugie po co przenosić te same dane do innej tabeli? Nie lepiej utworzyć jakiś widok który będzie korzystał z pierwszej tabeli?


tak, zawsze jest 6 zawodnikow.
A po co? "rosters" to aktualny sklad, na bieżącą kolejką. Teams_history to historia tych "rosterow". Chcę miec mozliwosc wrocenia do danych z poprzednich kolejek.

Cytat(Kshyhoo @ 28.03.2014, 13:01:43 ) *
Może ten artykuł Cię natchnie wink.gif


Wyższa szkoła jazdy jak dla mnie, "przedszkolaka"
Go to the top of the page
+Quote Post
ghost1511
post
Post #5





Grupa: Zarejestrowani
Postów: 186
Pomógł: 18
Dołączył: 2.09.2010

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


Cytat(Frugo75 @ 28.03.2014, 13:12:29 ) *
tak, zawsze jest 6 zawodnikow.
A po co? "rosters" to aktualny sklad, na bieżącą kolejką. Teams_history to historia tych "rosterow". Chcę miec mozliwosc wrocenia do danych z poprzednich kolejek.

W takim razie nie potrzebujesz dodatkowej tabeli a jedynie widoku z odpowiednio napisanym zapytaniem. Możesz to również zrobić osobną tabelą, ale jak sam napisałeś to "wyższa szkoła jazdy". Sprawdź co to Widok w SQL i zastanów się czy to na pewno nie to czego szukasz wink.gif
Go to the top of the page
+Quote Post
Frugo75
post
Post #6





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

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


Cytat(ghost1511 @ 28.03.2014, 13:19:59 ) *
W takim razie nie potrzebujesz dodatkowej tabeli a jedynie widoku z odpowiednio napisanym zapytaniem. Możesz to również zrobić osobną tabelą, ale jak sam napisałeś to "wyższa szkoła jazdy". Sprawdź co to Widok w SQL i zastanów się czy to na pewno nie to czego szukasz wink.gif


"Widoki nie przechowują kopii zapisanych w tabelach danych." A mnie właśnie potrzeba jest kopia.

A czy nie da się tak, zeby przypisane do team_id w tabeli dane "player_id" (6) przypisac do szesciu roznych zmiennych?
Go to the top of the page
+Quote Post
ghost1511
post
Post #7





Grupa: Zarejestrowani
Postów: 186
Pomógł: 18
Dołączył: 2.09.2010

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


Cytat(Frugo75 @ 28.03.2014, 13:40:04 ) *
"Widoki nie przechowują kopii zapisanych w tabelach danych." A mnie właśnie potrzeba jest kopia.

A czy nie da się tak, zeby przypisane do team_id w tabeli dane "player_id" (6) przypisac do szesciu roznych zmiennych?


Piękne zdanie... Trzeba się porządnie zastanowić co autor miał na myśli biggrin.gif

Nadal będę się upierał że widok w tym przypadku jest lepszy. I wcale nie potrzebujesz tego archiwizować w osobnej tabeli. Nie będziesz chyba usuwał rekordów z tabeli po archiwizacji? Bo po co? Plusy widoku są takie że czego byś nie robił UPDATE, DELETE, INSERT od razu wpływa na zawartość widoku. W przypadku tabeli archiwizującej potrzebujesz triggery które będą nad tym wszystkim czuwać.

Ten post edytował ghost1511 28.03.2014, 13:50:12
Go to the top of the page
+Quote Post
Frugo75
post
Post #8





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

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


Cytat(ghost1511 @ 28.03.2014, 13:48:08 ) *
Piękne zdanie... Trzeba się porządnie zastanowić co autor miał na myśli biggrin.gif

Nadal będę się upierał że widok w tym przypadku jest lepszy. I wcale nie potrzebujesz tego archiwizować w osobnej tabeli. Nie będziesz chyba usuwał rekordów z tabeli po archiwizacji. Bo po co? Plusy widoku są takie że czego byś nie robił UPDATE, DELETE, INSERT od razu wpływa na zawartość widoku. W przypadku tabeli archiwizującej potrzebujesz triggery które będą nad tym wszystkim czuwać.


Może opiszę od strony usera. User ustawia sobie sklad na mecz. Zaczyna się kolejka, ma zablokowane transfery - nie moze kupowac/sprzedawac zawodnikow. Zawodnicy ktorych ma są właśnie w tabeli "rosters".
Podczas trwania kolejki user otrzymuje punkty.
I teraz ważne. Przed ponownym umożliwieniem transferów chcę zapisać gdzies sobie sklad jaki miał w kolejce, poniewaz po ponownym uruchomieniu transferow, user moze wymieniac zawodnikow, a ja nie bede mial mozliwosc sprawdzenia jaki sklad mial w poprzedniej kolejce. Stad pomysl o tabeli teams_history.

Co ważne, przy transferach zmieniają się własnie dane w tabeli "rosters"
Go to the top of the page
+Quote Post
ghost1511
post
Post #9





Grupa: Zarejestrowani
Postów: 186
Pomógł: 18
Dołączył: 2.09.2010

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


Ale co chcesz zmieniać? Daj kolejną kolumnę ID_KOLEJKI.

USER 1
Kod
USER_ID ID_ROZGRYWKI ID_KOLEJKI ID_DRUZYNY
1 100 10 1
1 100 11 2


Widzisz że USER 1 w trakcie rozgrywki 100 po 10 kolejce zmienił drużynę na 2

Ten post edytował ghost1511 28.03.2014, 14:02:31
Go to the top of the page
+Quote Post
Frugo75
post
Post #10





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

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


Cytat(ghost1511 @ 28.03.2014, 13:59:09 ) *
Ale co chcesz zmieniać? Daj kolejną kolumnę ID_KOLEJKI.

O tym myslalem i skoro nie da sie inaczej chyba do tego bede musial wrocic.
A wyobrazalem sobie ze da się tak:
Pobieram dane team_id i tych sześciu player_id przypiszę do sześciu róznych zmiennych... Naprawdę nie da się tak?smile.gif
Go to the top of the page
+Quote Post
ghost1511
post
Post #11





Grupa: Zarejestrowani
Postów: 186
Pomógł: 18
Dołączył: 2.09.2010

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


Da się. Ale właściwie musisz napisać to samo zapytanie które będziesz miał w widoku.
Go to the top of the page
+Quote Post
Frugo75
post
Post #12





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

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


Cytat(ghost1511 @ 28.03.2014, 14:06:49 ) *
Da się. Ale właściwie musisz napisać to samo zapytanie które będziesz miał w widoku.

A zdradzisz jak? czy odeslesz mnie do googla?smile.gif
Go to the top of the page
+Quote Post
ghost1511
post
Post #13





Grupa: Zarejestrowani
Postów: 186
Pomógł: 18
Dołączył: 2.09.2010

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


Musisz wyniki złączyć joinem. Mniej więcej:
  1. SELECT team_id, round_id, player1.suma_punktow AS player1, player2.suma_punktow AS player2 ....
  2. FROM rosters
  3. LEFT JOIN ( zaptanie sumujace punkty zawodnika ) player1 ON ...
  4. LEFT JOIN ( zaptanie sumujace punkty zawodnika ) player2 ON ...


analogicznie dla reszty zawodników.

Ten post edytował ghost1511 28.03.2014, 14:18:08
Go to the top of the page
+Quote Post
Frugo75
post
Post #14





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

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


Cytat(ghost1511 @ 28.03.2014, 14:17:19 ) *
Musisz wyniki złączyć joinem. Mniej więcej:
  1. SELECT team_id, round_id, player1.suma_punktow AS player1, player2.suma_punktow AS player2 ....
  2. FROM rosters
  3. LEFT JOIN ( zaptanie sumujace punkty zawodnika ) player1 ON ...
  4. LEFT JOIN ( zaptanie sumujace punkty zawodnika ) player2 ON ...


analogicznie dla reszty zawodników.


Dziękuję z góry. Sprawdzę za kilka chwil.
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: 22.08.2025 - 11:18