kpSky
7.04.2009, 09:06:19
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?
adrian.p
7.04.2009, 09:30:25
SUM/AVG wykorzystujemy w b. prosty sposob:
Kod
SELECT AVG(`cena`) AS `srednia_cen`, SUM(`cena`) AS `suma_produktow` FROM `tabela`
kpSky
7.04.2009, 09:39:07
A jak skonkretyzować zapytanie? Tzn licz sumę (średnią) nie dla całej kolumny tylko dla elementów z konkretnej kategorii?
Kocurro
7.04.2009, 09:40:42
Kod
SELECT AVG(`cena`) AS `srednia_cen`, SUM(`cena`) AS `suma_produktow` FROM `tabela` WHERE `kategoria` = "fajne"
adrian.p
7.04.2009, 09:41:06
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.
kpSky
7.04.2009, 09:54:20
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ć?
nospor
7.04.2009, 09:56:12
wowczas stosujesz group by
SELECT id_kategorii AVG(`cena`) AS `srednia_cen`, SUM(`cena`) AS `suma_produktow` FROM `tabela` GROUP BY id_kategorii
kpSky
7.04.2009, 20:28:07
A w PHP
$zapytanie = "SELECT ...."; i dalej to co powyżej, czy też ten szyk trzeba zmienić?
adrian.p
7.04.2009, 22:16:29
Dalej wszystko wyglada tak samo.
kpSky
7.04.2009, 23:04:47
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.
nospor
7.04.2009, 23:29:44
Cytat
Ale teraz trzeba to jakoś wyświetlić...
zajrzyj wkoncu do manuala...
http://pl.php.net/manual/pl/function.mysql-fetch-array.php
kpSky
8.04.2009, 20:25:42
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:
<table border=1 class="wyniki">
<tr>
<td>kategoria</td>
<td>średnia_cena</td>
<td>suma_cen</td>
</tr>
<?php
$i=0;
$i++; if ($i%2==0) $parzystosc="parzysty";
else $parzystosc="nieparzysty";
?>
<tr class="<?= $parzystosc ?>">
<td valign='top'><?= $wynik->kategoria ?></td>
<td valign='top'><?= $wynik->srednia_cena ?></td>
<td valign='top'><?= $wynik->suma_cen ?></td>
</tr>
<?php
}
?>
</table>
może nieco pokrętnie ale działa i wypisuje wszystko w ładnej tabeli.
I to by było na tyle...
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.