![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Witam ,
Mam taki oto problem: Są trzy tabele: Gracz(numer,nazwa) Punkty(id,punkty,id_gracz) Stat(id,punkty_2,punkty_4,id_gracz) Mam takie danew nich: Gracz(1,'Damian'),(2,'Wojtek'),(3,'Mateusz'),(4,'Marcin') Punkty(1,12,1)(2,20,1) (3,8,2)(4,22,2) (5,16,3)(6,24,3) (7,10,4)(8,10,4) Stat(1,51,11,1)(2,55,11,1) (3,59,14,2)(4,57,19,2) (5,43,17,3)(6,69,9,3) (7,59,10,4) Uwaga! w tabeli Stat jest tylko jeden rekord dla gracza id=4 , dla pozostałych po 2 . Natomiast w tabeli punkty ten sam gracz ma dwa rekordy tak samo jak pozostali ! I teraz tak, potrzebuję pogrupować wyniki zapytania po nazwie gracza. Wykonując to zapytanie:
otrzymuję wyniki podwójnie, oprócz gracza Marcin, który w tabeli Stat ma tylko jeden rekord: Damian,51,11,32 Damian,55,11,32 Marcin,59,10,20 Mateusz,43,17,40 Mateusz,69,9,40 Wojtek,59,19,30 Wojtek,59,14,30 dlaczego ? proszę o podpowiedź, bo domyślam się że w moim zapytaniu jest byk, albo czegoś tam jeszcze brakuje,, dzięki |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Cytat otrzymuję wyniki podwójnie, oprócz gracza Marcin, który w tabeli Stat ma tylko jeden rekord: Cytat dlaczego ? proszę o podpowiedź, Sam sobie odpowiedziałeś na to pytanie: Cytat w tabeli Stat jest tylko jeden rekord dla gracza id=4 , dla pozostałych po 2 . Natomiast w tabeli punkty ten sam gracz ma dwa rekordy tak samo jak pozostali ! Zrobiłeś INNER JOIN, czyli wszystkie wyniki zostają dopasowane, w tabeli stat masz po 2 rekordy, które mają to samo ID gracza, więc te same dane z tabeli gracza zostają dwa razy dołączone. Nie da się nic więcej powiedzieć bo nie wiem czego oczekiwałeś, jeżeli chcesz, żeby gracze się nie dublowali to musisz użyć GROUP BY gracz_id. Ten post edytował tehaha 4.05.2012, 11:19:34 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
rozumiem, że chodzi Ci o taką konstrukcję:
jednak nadal rekordy się powielają dodałem do zapytania jeszcze ORDER BY pkt DESC żeby było widać na czym mi tutaj najbardziej zależy. Dokładniej: "chcę wyświetlać graczy posortowanych wg. sumy punktów z tabeli PUNKTY dlatego jest sum(punkty.punkty) ale dodatkowo chcę wyświetlać dla każdego gracza dane z jego statystykami z tabeli STAT ok już wiem co robiłem nie tak zapomniałem dodać że w tabeli STAT znajduje się jeszcze pole o nazwie "sezon" oznaczające numer sezonu. I jasne jest że dane do statystyki będą wyświetlane dla konkretnego sezonu. Bo trudno żeby mi się rekordy nie powieliły jak nie dam warunku WHERE na numer zesonu z którego mają być dane. Dlatego jak zapytanie zrobię tak:
to dane wyświetlą mi się tak jak tego oczekiwałem dzięki za próbę pomocy i sorry za nie dokładne dane do analizy temat można zamknąć Ten post edytował damianooo 4.05.2012, 11:38:07 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
w tym wypadku wystarczy grupowanie tylko po id, czyli numerze gracza, dodatkowo ten pierwszy warunek w drugim JOIN wydaje mi się mało sensowny, spróbuj tak:
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 2 Dołączył: 15.07.2011 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
wszystko fajnie , tylko nie zapominaj że numer sezonu jest tutaj ważny a więc potrzeba jeszcze WHERE. Poza tym bez tego ID
Ten post edytował damianooo 4.05.2012, 12:07:45 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Przenoszę do "Bazy danych".
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 08:42 |