Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sumowanie rekordów w pętli while ();
Forum PHP.pl > Forum > PHP
EastWest
Hej. Mam takie cudo:
  1. $result = mysql_query("SELECT id FROM kGildie_guilds ");
  2. if(mysql_num_rows($result) > 0)
  3. {
  4. while($row = mysql_fetch_assoc($result))
  5. {
  6. $result2 = mysql_query("SELECT name FROM kGildie_players where guild_id=".$row['id']."");
  7. if(mysql_num_rows($result2) > 0)
  8. {
  9. while($row2 = mysql_fetch_assoc($result2))
  10. {
  11. $result3 = mysql_query("SELECT points FROM stats where player='".$row2['name']."'");
  12. if(mysql_num_rows($result3) > 0)
  13. {
  14. $punkty=(int)0;
  15. settype($punkty, int);
  16. while($row3=mysql_fetch_array($result3)){
  17. $s = $row3[0];
  18. settype($s, int);
  19. settype($punkty, int);
  20. $punkty = $punkty + $s;
  21. echo $punkty;
  22. }
  23. }
  24. }
  25. }
  26. }
  27. }


No niby powinienem otrzymać sumę punktów ale otrzymuje takie coś:
12481405554988
a powinienem otrzymać:
4195

Pomoże ktoś?
kw95s
Zamiast $row3[0] wpisz $row3[wpisz nazwę]
EastWest
Nadal to samo
rtech.projekty.php
Podaj nam co się znajduje w $row3;
Najlepiej, jakbyś wyświetlił var_dump($row3) i var_export($var3) (wtedy będzie można sobie skopiować to co jest pobrane z bazy, wkleić do skryptu
i zobaczyć co się w kodzie dzieje).
b4rt3kk
Rzeczywiście cudo, proponuje zastąpić te trzy zapytania jednym... O takim:

  1. SELECT g.id id_guild, SUM(s.points) FROM kGildie_guilds g JOIN kGildie_players p ON g.id = p.guild_id JOIN stats s ON p.name = s.name GROUP BY g.id


Tak w ogóle, w tabeli stats nie trzymaj nazwy playera, tylko jego id. Wykonaj powyższe zapytanie, wyświetl i powinno tam być to czego potrzebujesz (liczba pkt dla każdej gildii?).
EastWest
Może wytłumaczę co chcę zrobić.
Mam 3 tabele: kGidlie_guilds, kGidlie_players i stats.
W tabeli kGidlie-guilds mam kolumnę punkty. Celem skryptu jest pobranie nazwy graczy i dopasawanie jej do odpowiedniej gildii. Po tym do gracza przypisywane są punkty z tabeli stats. Następnie sumuje punkty wszystkich graczy z danej gildii i wysyłam je do kgidlie_guilds do kolmuny punkty.
Tak wiem, mój kod jest zagmatwany, ale mam nadzieję, że z Waszą pomocą coś z tego wyjdzie.

Edit:
to otrzymałem z var_dump($row3);
bool(false)

a to z var_export($var3)
NULL
rtech.projekty.php
Cytat(EastWest @ 2.08.2013, 15:45:32 ) *
Edit:
to otrzymałem z var_dump($row3);
bool(false)

a to z var_export($var3)
NULL

Czyli zapytanie nic nie zwraca.
Sumowanie więc nie może działać.
b4rt3kk
To co opisałeś zrealizuje Ci napisane przeze mnie post wyżej zapytanie. Otrzymasz id gildii oraz sumę punktów.
EastWest
Zapytanie wywołane przez pma wyswietla mi takie bład:
#1054 - Unknown column 's.name' in 'on clause'

Edit: Jak byś mógł to mi wytłumacz co dokładnie robi to zapytanie, bo nie chcę tylko kopiuj wklei a chcę się czegoś nauczyć
rtech.projekty.php
Cytat(EastWest @ 2.08.2013, 15:54:01 ) *
Zapytanie wywołane przez pma wyswietla mi takie bład:
#1054 - Unknown column 's.name' in 'on clause'

Edit: Jak byś mógł to mi wytłumacz co dokładnie robi to zapytanie, bo nie chcę tylko kopiuj wklei a chcę się czegoś nauczyć

Bo w tabeli 'stats' nie masz kolumny 'name'.
Zmodyfikuj zapytanie.
b4rt3kk
Pomyliłem nazwy komórek, zapytanie powinno wyglądać tak:

  1. SELECT g.id id_guild, SUM(s.points) FROM kGildie_guilds g JOIN kGildie_players p ON g.id = p.guild_id JOIN stats s ON p.name = s.player GROUP BY g.id


Jeśli dalej błąd to przedstaw definicję tabelek z bazy.

Zapytanie pobiera id gildii oraz sumę punktów (funkcja SUM) dal danej gildii, grupując po id gildii. JOIN-em dołączasz potrzebne tabele do wykonania tego działania.

EastWest
Okej mam id gildii i punkty. Teraz jak zrobić zeby wyswietlić kolumny z tabeli kGildie-guilds
Pogubiłem sie w tym już ;D

Edit:
Okej poradziłem sobie.
Dzięki za pomoc.
Można zamknąć ; )
b4rt3kk
Cytat(EastWest @ 2.08.2013, 16:07:23 ) *
Okej mam id gildii i punkty. Teraz jak zrobić zeby wyswietlić kolumny z tabeli kGildie-guilds
Pogubiłem sie w tym już ;D


Po SELECT masz nazwy kolumn, które chcesz pobrać, tak więc zmień:

  1. SELECT g.*, SUM(s.points)

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.