Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Sumowanie wartości ze zmiennej
Forum PHP.pl > Forum > Przedszkole
Frugo75
Witam ponownie,

Czy może mi ktoś napisać, jak zsumować wartości istniejące w zmiennej?
W pętli foreach mam w zmiennej $points punkty cześciu różnych zawodników z danej kolejki. Jak mogę je zsumować?
vonski
Rozumiem, że $points jest tablicą? Jeśli tak to array_sum.
Frugo75
Cytat(vonski @ 7.04.2014, 22:17:53 ) *
Rozumiem, że $points jest tablicą? Jeśli tak to array_sum.


Wyglada to tak:

  1.  
  2.  
  3. //Pobieram player_id
  4. $res = takeFromRoster();
  5.  
  6. foreach ($res as $resa) {
  7.  
  8. $id = $resa['player_id'];
  9.  
  10. //Pobieram punkty graczy o tym player_id
  11.  
  12. dbConnect();
  13. $result = mysql_query("SELECT SUM(score01) AS suma FROM players WHERE id = '$id'") or die(mysql_error());
  14.  
  15.  
  16. $wynik = mysql_fetch_array($result);
  17.  
  18. $points = $wynik['suma']."<hr>";
  19.  
  20.  
  21.  
  22. }
  23.  
vonski
  1. $points = $wynik['suma']."<hr>";

Co to jest?


Przed foreach daj:
  1. $points = 0;


A w pętli dodawaj kolejne punkty:
  1. $points = $points + $wynik['suma'];
Frugo75
Juz działa

  1. $res = takeFromRoster();
  2. $points = 0;
  3. foreach ($res as $resa) {
  4.  
  5. $id = $resa['player_id'];
  6.  
  7. //Pobieram punkty graczy o tym player_id
  8.  
  9. dbConnect();
  10. $result = mysql_query("SELECT SUM(score01) AS suma FROM players WHERE id = '$id'") or die(mysql_error());
  11.  
  12.  
  13. $wynik = mysql_fetch_array($result);
  14.  
  15. $points = $points + $wynik['suma'];
  16.  
  17.  
  18.  
  19. }
  20.  
  21. echo $points;


Dziękuję Ci kolego.
Szymciosek
Czytałeś dokumentację oraz taką fajną czerwoną notkę? http://pl1.php.net/mysql_query
To tylko taka uwaga na przyszłość.
Frugo75
Cytat(Szymciosek @ 8.04.2014, 01:13:49 ) *
Czytałeś dokumentację oraz taką fajną czerwoną notkę? http://pl1.php.net/mysql_query
To tylko taka uwaga na przyszłość.


To co radzisz? Na co sie przestawic?


Ostatni chyba problem, ale chyba do rozwiązania. Proszę o podpowiedz uzyskać efekt końcowy w postaci sumy naliczonych punktów do każdego team_id.
Już wyjaśniam mam dwie tabele

1. rosters
  1. id player_id position_id team_id club_id round_id
  2. 388 29 7 2 20 1
  3. 389 28 6 2 19 1


oraz

2. players
  1. id score01
  2. 1 12
  3. 2 23


Chcę teraz pobrać z rosters: player_id, team_id gdzie round_id = 1 , a następnie pobrać odpowiednio do player_id (rosters) id (z players), następnie pobrać odpowiednie wartosci ze score01 i je zsumować.

Innymi słowy chcę uzyskać sumę punktów dla danego team_id, a na tę sumę punktów składa się suma wartości ze score01. Na koniec - ale to już dam rade, chce te sumę wysłać do innego pola w innej tabeli.

Mam nadzieje ze zrozumiale napisalem.
plej
Może zamiast:
  1. $points = $points + $wynik['suma'];

Daj:
  1. $pints += $wynik['suma'];


Zawsze trochę mniej kodu biggrin.gif

Edit


Do powyżej twojej wypowiedzi musisz zastosować inner join cos podobnego do tego:
select * from players inner join rosters on players.id = rosters.player_id

Możesz też na dwa zapytania zrobić
select * from players <- to w petli while
tu wybierasz id playera ($id)
i
select * from rosters where player_id=$id

itd...
Poczytaj o zapytaniach mysql troche.
Pyton_000
Wydajniej, optymalniej, szybciej, bardziej elegancko będzie jak zbierzesz wszystkie ID userów i zrobisz 1 select:
  1. SELECT sum(score) FROM users WHERE id IN (1,2,3,4,5....)

Nie ma sensu zapychanie serwera gromadą zapytań skoro można to zrealizoawć 1 zapytaniem.
Frugo75
Cytat(Pyton_000 @ 8.04.2014, 17:58:53 ) *
Wydajniej, optymalniej, szybciej, bardziej elegancko będzie jak zbierzesz wszystkie ID userów i zrobisz 1 select:
  1. SELECT sum(score) FROM users WHERE id IN (1,2,3,4,5....)

Nie ma sensu zapychanie serwera gromadą zapytań skoro można to zrealizoawć 1 zapytaniem.



Chyba troche nie to dostane co chcę. Oto kroki ktore mam w glowie:

1. Pobieram z tabeli rosters dane team_id (jeden user ma jeden team_id) oraz player_id
2. Kazdy team_id ma przypisanych szesciu zawodnikow (player_id)
3. W tabeli players każdy zawodnik ma score01, czyli punkty.
4. Chcę teraz pobrac te punkty od tych szesciu graczy, ZSUMOWAĆ je wstawić do zupelnie innej tabeli.


Cytat(Frugo75 @ 8.04.2014, 18:53:01 ) *
Chyba troche nie to dostane co chcę. Oto kroki ktore mam w glowie:

1. Pobieram z tabeli rosters dane team_id (jeden user ma jeden team_id) oraz player_id
2. Kazdy team_id ma przypisanych szesciu zawodnikow (player_id)
3. W tabeli players każdy zawodnik ma score01, czyli punkty.
4. Chcę teraz pobrac te punkty od tych szesciu graczy, ZSUMOWAĆ je wstawić do zupelnie innej tabeli.


Pomoże ktoś, proszę?
plej
Nikt ci nie napisze kodowych kodów chyba że jak zapłacisz.
Podano Ci kilka przykładów więc musisz je wykorzystać. Skoro piszesz gre czy coś podobnego. Powinieneś znać się na zapytaniach do bazy i na php.
Pokaż co masz zrobione i wklej baze danych. Tu na forum nie piszą gotowych przykładów tylko pomagają poprawić twój przykład lub Cię na kierować.
"PHP i MySQL - Dla każdego" książka ma z 800stron ale lepszej nie czytałem może dlatego że pisana przez Polaka.
Szymciosek
Cytat(Frugo75 @ 8.04.2014, 13:53:42 ) *
To co radzisz? Na co sie przestawic?


W tej dokumentacji (znowu czerwone pole) jest też napisane z czego możesz korzystać. Mysqli lub PDO.
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.