Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP/MySql] suma i wartość średnia
kpSky
post 7.04.2009, 09:06:19
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 31.03.2009

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


Witam!

Mam następujący problem: posiadam tabelę w MySql, która wśród kilku innych zawiera kolumny: kategoria i cena. Chcę w php napisać taki kod, by w  wyniku uzyskać tabelę składającą się z 3 kolumn. Pierwsza wypisywałaby wszystkie kategorie, druga sumę cen wszystkich elementów należących do tej kategorii, zaś trzecia wartość średnią. Nie wiem czy to uprości zagadnienie, ale jako że ilość kategori jest skończona, można w pierwszej kolumnie wypisać je "na sztywno" bez przeszukiwania bazy, ale te sumy i średnie trzeba już zliczać. Wiem, że SUM i AVG, ale ni jak nie wiem jak to zrobić.

Macie jakieś pomysł? Podpowiedzi?
Go to the top of the page
+Quote Post
adrian.p
post 7.04.2009, 09:30:25
Post #2





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 27.03.2009

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


SUM/AVG wykorzystujemy w b. prosty sposob:

Kod
SELECT AVG(`cena`) AS `srednia_cen`, SUM(`cena`) AS `suma_produktow` FROM `tabela`


Ten post edytował adrian.p 7.04.2009, 09:30:48
Go to the top of the page
+Quote Post
kpSky
post 7.04.2009, 09:39:07
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 31.03.2009

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


A jak skonkretyzować zapytanie? Tzn licz sumę (średnią) nie dla całej kolumny tylko dla elementów z konkretnej kategorii? 
Go to the top of the page
+Quote Post
Kocurro
post 7.04.2009, 09:40:42
Post #4





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

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


Kod
SELECT AVG(`cena`) AS `srednia_cen`, SUM(`cena`) AS `suma_produktow` FROM `tabela` WHERE `kategoria` = "fajne"
Go to the top of the page
+Quote Post
adrian.p
post 7.04.2009, 09:41:06
Post #5





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 27.03.2009

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


Dopisujemy tylko "where" z odpowiednimi warunkami.

Kod
SELECT AVG(`cena`) AS `srednia_cen`, SUM(`cena`) AS `suma_produktow` FROM `tabela` WHERE `id_kategori` = 123


Chyba ze łaczenie produkt-kategoria masz w innej tabeli, wtedy trzeba by bylo polaczyc te tabele.

Ten post edytował adrian.p 7.04.2009, 09:41:42
Go to the top of the page
+Quote Post
kpSky
post 7.04.2009, 09:54:20
Post #6





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 31.03.2009

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


Rozumiem, że w ten sposób otrzymam sumę i wartość średnią dla jednej konkretnej kategorii. Czy gdy tych kategorii jest kilka i dla nich wszystkich chce wyliczyć te wartości, to funkcję tę muszę wpisać tyle razy ile jest kategorii, czy też można to jakoś uprościć?
Go to the top of the page
+Quote Post
nospor
post 7.04.2009, 09:56:12
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




wowczas stosujesz group by
  1. SELECT id_kategorii AVG(`cena`) AS `srednia_cen`, SUM(`cena`) AS `suma_produktow` FROM `tabela` GROUP BY id_kategorii


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kpSky
post 7.04.2009, 20:28:07
Post #8





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 31.03.2009

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


A w PHP

$zapytanie = "SELECT ...."; i dalej to co powyżej, czy też ten szyk trzeba zmienić?
Go to the top of the page
+Quote Post
adrian.p
post 7.04.2009, 22:16:29
Post #9





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 27.03.2009

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


Dalej wszystko wyglada tak samo.
Go to the top of the page
+Quote Post
kpSky
post 7.04.2009, 23:04:47
Post #10





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 31.03.2009

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


Wielkie dzięki!

Ale teraz trzeba to jakoś wyświetlić...

Czy jest jakaś nieskomplikowana metoda?

Przypominam, że chodzi chodzi tu o php. Wygląd nie musi być jakiś wyszukany.
Go to the top of the page
+Quote Post
nospor
post 7.04.2009, 23:29:44
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Ale teraz trzeba to jakoś wyświetlić...

zajrzyj wkoncu do manuala...
http://pl.php.net/manual/pl/function.mysql-fetch-array.php


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kpSky
post 8.04.2009, 20:25:42
Post #12





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 31.03.2009

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


Dzięki wszystkim za pomoc.

Wszystko chodzi jak złoto. Wasze podpowiedzi okazały się skuteczne, a zwłaszcza to napisane przez nospora. 

Przedstawienie wyników zrobiłem następująco:

  1.     <table border=1 class="wyniki">
  2.     <tr>
  3.      
  4.       <td>kategoria</td>
  5.       <td>średnia_cena</td>
  6.       <td>suma_cen</td>
  7.     </tr>
  8.  
  9. <?php
  10.       $i=0;
  11.       while ($wynik = mysql_fetch_object($rezultat)) {
  12.            $i++; if ($i%2==0) $parzystosc="parzysty";
  13.                  else $parzystosc="nieparzysty";
  14. ?>
  15.           <tr class="<?= $parzystosc ?>">
  16.          
  17.           <td valign='top'><?= $wynik->kategoria ?></td>
  18.           <td valign='top'><?= $wynik->srednia_cena ?></td>
  19.           <td valign='top'><?= $wynik->suma_cen ?></td>
  20.           </tr>
  21. <?php
  22.       }
  23. ?>
  24.     </table>




może nieco pokrętnie ale działa i wypisuje wszystko w ładnej tabeli.

I to by było na tyle...

Ten post edytował erix 8.04.2009, 21:03:22
Powód edycji: [erix] na przyszłość używaj bbcode
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 07:02