Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Sumowanie poszczególnych wierszy tabeli
Forum PHP.pl > Forum > Przedszkole
zaworek
Witam,

nie mogę poradzić sobie z sumowaniem wybranych wierszy tabeli, która ma postać

Kod
id|nr1|nr2|nr3|wynik1|wynik2

(nr1, nr2, nr3 oraz wynik1, wynik2 to zmienne typu float)

Chciałbym dla całej tabeli uzyskać taki oto wynik:

wynik1 = nr1+nr2
wynik2 = nr1+nr2+nr3


wyświetlam wszystko przez poniższy kod

  1. $uchwyt=mysql_connect('host','login','pas') or die('Blad polaczenia');
  2. mysql_select_db('baza') or die('Nie mozna wybrac bazy');
  3. $link=mysql_query("SELECT * FROM tabela");
  4. while($wiersz=mysql_fetch_array($link))
  5. {
  6. echo '<tr>
  7. <td align="center">'.$wiersz['nr1'].'</td>
  8. <td align="center">'.$wiersz['nr2'].'</td>
  9. <td align="center">'.$wiersz['nr3'].'</td>
  10. <td align="center">'.$wiersz['wynik1'].'</td>
  11. <td align="center">'.$wiersz['wynik2'].'</td>
  12. </tr>';
  13. }


Dla wynik1 próbowałem napisać jak poniżej ale bez rezultatu.

  1. $q = mysql_query("SELECT nr1+nr2 AS wynik1 FROM tabela") or die(mysql_error());
  2. while($r = mysql_fetch_assoc($q))
  3. {
  4. mysql_query("UPDATE tabela SET wynik1 = '.$r[wynik1].' WHERE id = '.$r[id].'");
  5. }


Mógłby ktoś pomóc i naprowadzić mnie na rozwiązanie?
nospor
  1. UPDATE tabela SET wynik1=nr1 + nr2, wynik2=nr1 + nr2 + nr3

I juz
sadistic_son
Moim zdaniem masz zły tok rozumowania. Kolumny wynik1 i wynik2 są w ogóle Tobie niepotrzebne. Skoro to tylko sumy poprzednich pól to można, a wręcz należy je pominąć. Po co zapisywać w bazie coś co jest inną postacią (sumą) innych pól? Możesz zawsze, w przypadku potrzeby użycia wynik1 wyciągnąć sobie z bazy n1 i nr2 i zsumować je w php.

Ale jeśli już się uparłeś żeby tak było to alternatywne rozwiązanie dla tego, które podał nospor masz poniżej ; to lekko zmodyfikowany Twój kod z drugiego bloku:

  1. $q = mysql_query("SELECT id,nr1, nr2 FROM tabela") or die(mysql_error());
  2. while($r = mysql_fetch_assoc($q))
  3. {
  4. $wynik1=$r['nr1']+$r['nr2'];
  5. mysql_query("UPDATE tabela SET wynik1 = $r[wynik1] WHERE id = $r[id]");
  6. }
zaworek
Cytat(nospor @ 6.02.2012, 15:24:16 ) *
  1. UPDATE tabela SET wynik1=nr1 + nr2, wynik2=nr1 + nr2 + nr3

I juz


Dzięki @nospor
Naprowadź mnie jeszcze jak to zaimplementować do mojego kodu z wyświetlaniem, tak aby update wykonał się w pętli (dla wszystkich id).
nospor
Kod co ci podałem masz wykonać tylko raz - bez żadnej pętli - bo i po co. On przeleci po wszystkich rekordach bez petli
zaworek
Cytat(nospor @ 6.02.2012, 15:37:55 ) *
Kod co ci podałem masz wykonać tylko raz - bez żadnej pętli - bo i po co. On przeleci po wszystkich rekordach bez petli


Z SQL miałem mało do czynienia. Wkleiłem jak poniżej ale nie zmienia wartości w kolumnie wynik1, wynik2

  1. $uchwyt=mysql_connect('host','login','pas') or die('Blad polaczenia');
  2. mysql_select_db('baza') or die('Nie mozna wybrac bazy');
  3. mysql_query("UPDATE tabela SET wynik1=nr1 + nr2, wynik2=nr1 + nr2 + nr3");
  4. $link=mysql_query("SELECT * FROM tabela");
  5. while($wiersz=mysql_fetch_array($link))
  6. {
  7. echo '<tr>
  8. <td align="center">'.$wiersz['nr1'].'</td>
  9. <td align="center">'.$wiersz['nr2'].'</td>
  10. <td align="center">'.$wiersz['nr3'].'</td>
  11. <td align="center">'.$wiersz['wynik1'].'</td>
  12. <td align="center">'.$wiersz['wynik2'].'</td>
  13. </tr>';
  14. }
nospor
mysql_query("UPDATE tabela SET wynik1=nr1 + nr2, wynik2=nr1 + nr2 + nr3") or die(mysql_error());
zaworek
Jednak działa smile.gif Pomyliłem się w nazwie jednej z kolumn.
Dziekuję za pomoc @nospor.
nospor
No ale tak jak pisał poprzednik, na chwilę obecną jest to bez sensu. Tworzysz dwie dodatkowe kolumny tylko po to, by pobrać z nich wynik przy wyświetlaniu. Przecież równie dobrze możesz to zsumować w php przed wyświetleniem.

No chyba, że ma ci to służyć jeszcze czemuś.
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.