Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Sumowanie danych z kolumny w zależności od parametru w innej kolumnie?
mastercherat
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.11.2009

Ostrzeżenie: (0%)
-----


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?
(IMG:style_emoticons/default/wstydnis.gif)

Ten post edytował mastercherat 24.11.2009, 11:50:27
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 17)
piotrooo89
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




no w pętle to musisz wrzucić.
Go to the top of the page
+Quote Post
mastercherat
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.11.2009

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
phpion
post
Post #4





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




  1. SELECT SUM(`P`) AS suma FROM `tabela` WHERE `SID`=2;
Go to the top of the page
+Quote Post
piotrooo89
post
Post #5


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




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. .
Go to the top of the page
+Quote Post
phpion
post
Post #6





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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 (IMG:style_emoticons/default/smile.gif)

Ten post edytował phpion 24.11.2009, 13:32:46
Go to the top of the page
+Quote Post
mastercherat
post
Post #7





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.11.2009

Ostrzeżenie: (0%)
-----


ok jest to jakiś trop (IMG:style_emoticons/default/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.......
Go to the top of the page
+Quote Post
piotrooo89
post
Post #8


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




tak tak zły pion (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
phpion
post
Post #9





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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

Zwróci 2 dane? 2 rekordy?
Go to the top of the page
+Quote Post
zegarek84
post
Post #10





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


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`


Ten post edytował zegarek84 24.11.2009, 12:43:39
Go to the top of the page
+Quote Post
piotrooo89
post
Post #11


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




kurde rzeczywiście, ja juz nie nie mówie, bo sie pogrążam, masz 100% racji... :|
Go to the top of the page
+Quote Post
mastercherat
post
Post #12





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.11.2009

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/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.

Go to the top of the page
+Quote Post
piotrooo89
post
Post #13


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




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


tylko musisz mieć coś w tej zmiennej.
Go to the top of the page
+Quote Post
mastercherat
post
Post #14





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.11.2009

Ostrzeżenie: (0%)
-----


gra muzyka (IMG:style_emoticons/default/guitar.gif)

(IMG:style_emoticons/default/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 (IMG:style_emoticons/default/blinksmiley.gif) (IMG:style_emoticons/default/questionmark.gif) ?
Go to the top of the page
+Quote Post
piotrooo89
post
Post #15


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




jakiego typu masz kolumny?
Go to the top of the page
+Quote Post
mastercherat
post
Post #16





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.11.2009

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/smile.gif) )
Go to the top of the page
+Quote Post
phpion
post
Post #17





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




  1. $query = 'SELECT ROUND(SUM(P), 2) AS suma FROM tabela WHERE SID='.$opt.'';
Go to the top of the page
+Quote Post
mastercherat
post
Post #18





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.11.2009

Ostrzeżenie: (0%)
-----


czyli zaokrąglenie zwykłe (IMG:style_emoticons/default/wstydnis.gif)

Ok, ale ważne, że działa (IMG:style_emoticons/default/rolleyes.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 22:53