Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ SQLite _ GROUP BY, zdublowane wartości

Napisany przez: leonw 10.02.2017, 19:24:10

Witam

Temat wygląda następująco:
Mam trzy tabele (Alias, Player, WeaponData), każda związana z każdą przez "Player_ID".
W pierwszej tabeli "Alias", konkretna wartość (w tym przypadku 3) powtarza się dwa razy.
Teraz jeżeli wyciągam wartości z trzeciej tabeli, zgrupowane wg. player_ID, dostaje podwojony wynik.
Podejrzewam, że jest to związane przez wystąpienie tego samego "Player_ID" w tabeli "Alias" dwa razy.

Jeżeli w tym zapytaniu pominę tabelę "Alias", to wynik otrzymuję poprawny.

Tak wygląda zapytanie:

  1. SELECT Player.ID,
  2. Alias.Name,
  3. Player.AsAllied,
  4. Player.AsAxis,
  5. Player.TotalTime,
  6. Player.IsBot,
  7. SUM(WeaponData.Kills) AS Kills,
  8. SUM(WeaponData.Deaths) AS Deaths
  9.  
  10. FROM Alias, Player, WeaponData
  11. WHERE WeaponData.Player_ID=Player.ID
  12. AND Alias.Player_ID=Player.ID
  13.  
  14. GROUP BY WeaponData.Player_ID


Jakieś podpowiedzi, dla czego tak się dzieje?

Napisany przez: kicaj 11.02.2017, 13:37:27

DISTINCT po kolumnie zduplikowanej?

Napisany przez: leonw 11.02.2017, 13:46:09

Udało mi się rozwiązać ten problem, choć nie wiem czy prawidłowo.
Zapytanie:

  1. SELECT Player.ID,
  2. (SELECT Alias.Name FROM Alias WHERE Alias.Player_ID=Player.ID GROUP BY Alias.Player_ID) AS Name,
  3. Player.AsAllied,
  4. Player.AsAxis,
  5. Player.TotalTime,
  6. Player.IsBot,
  7. SUM(WeaponData.Kills) AS Kills,
  8. SUM(WeaponData.Deaths) AS Deaths
  9.  
  10. FROM Player, WeaponData
  11.  
  12. WHERE Player.ID=WeaponData.Player_ID
  13.  
  14. GROUP BY WeaponData.Player_ID


wyświetla prawidłowy wynik. Jakoś nie do końca mogę pojąć jak to działa.
W poprzednim zapytaniu wynik "SUM(WeaponData.Kills) AS Kill" był mnożony tyle razy, ile razy dane ID występowało w "Alias". Tj. prawidłowy wynik to 8, jeżeli w "Alias" dane ID występowało 2x, wynik = 16, jeżeli 3x, wynik = 24.

Cytat(kicaj @ 11.02.2017, 13:37:27 ) *
DISTINCT po kolumnie zduplikowanej?


Użycie DISTINCT nie przynosi żadnej zmiany.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)