Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Sumowanie danych z kolumny w zależności od parametru w innej kolumnie?
Forum PHP.pl > Forum > Przedszkole
mastercherat
Witam,

Potrzebuję wyciągnąć z bazy danych MySQL sumę komórek z jednej kolumny w tabeli ale tylko tych, które w innej kolumnie mają określoną wartość:
przykładowo jest tabela z kolumnami SID oraz P:
SID|P
1|2
1|1
1|3
2|2
2|1
3|1
3|1
3|1

I chcę z niej wyciągnąć sumę wszystkich komórek z kolumny P które w kolumnie SID mają wartość 2. czyli 2+1=3
mam cały kod, którym moge wyciągnąć komórkę z bazy:

list($payopt) = $database->select($cfg['DB']['table'], array(array('sid'=>2)));
$payopt['P']
Z tym ze wyciąga on mi tylko wartość pierwszej komórki dla której SID=2, w tym przypadku 2. Jak zrobić aby wyciągną także wartość drugiej komórki dla której SID =2 (a także kolejnych jeśli takie się pojawią) i zrobił z nich sumę?

Może mi ktoś w tym temacie pomóc?
wstydnis.gif
piotrooo89
no w pętle to musisz wrzucić.
mastercherat
Domyślam się, tylko że jestem na tyle zielony, że nie wiem jak to zrobić właśnie.

całe to list wrzucić w jakąś pętlę czy jak? jakaś tablica mi się z tego utworzy? i potem sumować jej elementy?
phpion
  1. SELECT SUM(`P`) AS suma FROM `tabela` WHERE `SID`=2;
piotrooo89
tak pion ale żeby dostać te 2 dane musi wrzucić do pętli... tak to wyświetli mu się tylko jeden rekord.

najlepiej:

  1. while($row = mysql_fetch_array("SELECT SUM(P) AS suma FROM tabela WHERE SID=2"))
  2. .
  3. .
  4. .
phpion
Jakie 2 dane? Przecież powyższe zapytanie zawsze zwróci 1 rekord. Generalnie prościej zrobić tak:
  1. $query = 'SELECT SUM(P) AS suma FROM tabela WHERE SID=2';
  2. $result = mysql_query($query); // autor tematu znalazl tu literowke, wiec poprawiam
  3. echo mysql_result($result, 0);


PS: i Twój kod jest błędny - zobacz co pakujesz do mysql_fetch_array smile.gif
mastercherat
ok jest to jakiś trop smile.gif


ja w phpmyAdmin wpisuję

  1. SELECT SUM(`P`) AS suma FROM `tabela` WHERE `SID`=2;


(oczywiście z wpisana nazwa tabeli to wyświetla sumę.

ale jak w pliku dodają linijkę


  1. while($row = mysql_fetch_array("SELECT SUM(P) AS suma FROM tabela WHERE SID=2"))


to po wykonaniu dostaję

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /nnn.......
piotrooo89
tak tak zły pion wstydnis.gif

  1. while($row = mysql_fetch_array(mysql_query("SELECT SUM(P) AS suma FROM tabela WHERE SID=2")))


tak to powinno wyglądać.

Cytat
Jakie 2 dane? Przecież powyższe zapytanie zawsze zwróci 1 rekord.


no powinno 2 zwrócić:

SID|P
1|2
1|1
1|3
2|2
2|1

3|1
3|1
3|1
phpion
  1. SELECT SUM(P) AS suma FROM tabela WHERE SID=2

Zwróci 2 dane? 2 rekordy?
zegarek84
Cytat
no powinno 2 zwrócić:
sumę z tych 2 a nie 2 - wynik z takiej sumy jest jeden - a jeśli chciałby do wszystkich SID to:
  1. SELECT `SID`, SUM(`P`) AS suma FROM tabela GROUP BY `SID`
piotrooo89
kurde rzeczywiście, ja juz nie nie mówie, bo sie pogrążam, masz 100% racji... :|
mastercherat
Cytat(phpion @ 24.11.2009, 12:34:42 ) *
Jakie 2 dane? Przecież powyższe zapytanie zawsze zwróci 1 rekord. Generalnie prościej zrobić tak:
  1. $query = 'SELECT SUM(P) AS suma FROM tabela WHERE SID=2';
  2. $result = mysql_query($q);
  3. echo mysql_result($result, 0);


o to jest super + drobne poprawki w drugiej linijce zamiast $q to $query
oraz modyfikacja, na końcu zamiast wyświetlania, to wrzucenie do nowej zmiennej
$r = mysql_result($result, 0);[/php]

i dalej już mogę śmiało korzystać z $r smile.gif
a poniżej zmodyfikowany kod:

  1. $query = 'SELECT SUM(P) AS suma FROM tabela WHERE SID=2';
  2. $result = mysql_query($query);
  3. $r = mysql_result($result, 0);




ojojoj....

zapomniałem jeszcze spytać o jedno.

co zrobić aby w


$query = 'SELECT SUM(P) AS suma FROM tabela WHERE SID=2';

wykorzystać wcześniej zdefiniowaną wartość zamiast z palca wklepywać 2

Wartość tą mam w postaci $opt
w przypadku komendy list nie było problemu tam gdzie było 2 wpisałem $opt.
ALe jak to samo robię w query
$query = 'SELECT SUM(P) AS suma FROM tabela WHERE SID=$opt';
to nie działa.

piotrooo89
  1. $query = 'SELECT SUM(P) AS suma FROM tabela WHERE SID='.$opt.'';


tylko musisz mieć coś w tej zmiennej.
mastercherat
gra muzyka guitar.gif

thumbsupsmileyanim.gif

oczywiście w zmiennej mam oczywiście liczbę określającą sid.

Dzięki wielkie jeszcze raz !

heh, myślałem że mnie już nic nie zaskoczy , a tu jednak

w jednej komórce ma 1,33 a w drugiej 2,33

a suma wychodzi :
3.6599999666214 blinksmiley.gif questionmark.gif?
piotrooo89
jakiego typu masz kolumny?
mastercherat
sid jest int(11)
natomiast (co pewnie jest bardziej istotne), P jest typu float.

z tego co widzę problem jest z drugim miejscem po przecinku. Jeśli jest tam 0 (np. 1,10 + 2,40)to dodaje się normalnie, ale jak już coś tam się pojawi (np. 1,15+2,35) to już suma nie taka jak trzeba. czyli mniejsza o kilka miliardowych (czy jakichś tam smile.gif)
phpion
  1. $query = 'SELECT ROUND(SUM(P), 2) AS suma FROM tabela WHERE SID='.$opt.'';
mastercherat
czyli zaokrąglenie zwykłe wstydnis.gif

Ok, ale ważne, że działa rolleyes.gif
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.