Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Suma elementów tablicy
Forum PHP.pl > Forum > PHP
e-konrad
Witam,
Od dłuższego czasu próbuję wykonać działanie sumy na elementach tablicy, dane z tablicy pozyskuję z bazy danych mysql. Mój kod
  1. $query = mysql_query("select t.customer_id as 'customer', SUM(ta.time_unit)*60 as 'czas'
  2. FROM ticket t
  3. left join time_accounting ta ON ta.ticket_id=t.id
  4. WHERE
  5. t.customer_id like '$klient' AND
  6. t.create_time BETWEEN '$data_od 00:00:00' AND '$data_do 23:59:59' AND
  7. ta.time_unit is NOT NULL
  8. GROUP BY t.customer_id");
  9. $allTime = array();
  10. while($row = mysql_fetch_assoc($query))
  11. {
  12. $allTime[] += $row['czas'];
  13. licz_czas($row['customer'],$row['czas']);
  14. }
  15. $total = array_sum($allTime);
  16. echo $total;

wynikiem jest wyświetlenie po kolei wszystkich elementów, w moim przypadku czasów.

Co jest nie tak?
nospor
nie: $allTime[] += $row['czas'];
a: $allTime[] = $row['czas'];

swoją drogą po grzyba mieszasz w to tablice??

  1. $suma = 0;
  2.  
  3. while($row = mysql_fetch_assoc($query))
  4.  
  5. {
  6.  
  7. $suma += $row['czas'];
  8.  
  9. licz_czas($row['customer'],$row['czas']);
  10.  
  11. }
  12.  
  13. echo $suma;
e-konrad
zapytanie zwracało mi czas w postaci xx.xx, użyłem explode i dostosowałem pod Twój kod. Wypisało mi wartości.

  1. $suma = 0;
  2. while($row = mysql_fetch_assoc($query))
  3. {
  4. $czas = explode('.',$row['czas']);
  5. $suma += $czas[0];
  6. licz_czas($row['customer'],$row['czas']);
  7. }
  8. echo $suma;
nospor
Jesli nadal nadal wypisuje ci kilka wartosci znaczy ze
albo ta linijka
licz_czas($row['customer'],$row['czas']);
cos wyswietla na ekran

albo kod co pokazales masz jeszcze w jakiejs petli wiec logiczne ze echo $suma wyswietli ci sie wiele razy
e-konrad
całe zapytanie jest w funkcji które jest wykonywane tyle razy ilu jest klientów
nospor
No to czemu sie dziwisz, ze suma wyswietla ci sie wielokrotnie? Skoro dla kazdego klienta liczysz i wyswietlasz sume, to dla kazdego sie wyswietli - logiczne
e-konrad
inaczej tego nie rozwiążę ponieważ z jednej bazy pobieram klientów następnie na podstawie wyników(klientów) wyciągam dane z innej bazy danych(czasy)
nospor
No ale ty czas chcesz sumowac dla kazdego klienta oddzielnie czy dla wszystkich razem?
e-konrad
dla wszystkich razem
nospor
No to skoro dla wszystkich razzem, to czemy wyswietlanei robisz w petli?
Wyswietlanie $suma masz robic poza główną petlą a nie w srodku, oraz zerowanie $suma=0 masz robic przed petlę główną a nie w srodku

A jesli tem kod $suma+=... jest w funkcji, to albo przekazuje $suma przez parametr, zwracaj i odbieraj, albo uzywaj global.
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.