MySQL -> SUM(record) vraag
Ik heb in mijn database een record basic staan, waar de prijs per module in staat.
Nu heb ik dus een row met de naam van de modules en een row met de prijs van de modules, maar nu wil ik dus ook een totaalprijs van de modules krijgen.
In mijn query kan ik niet een totaal op deze manier krijgen:
Heeft iemand suggesties hoe ik dit kan aanpakken?
Toevoeging op 17/11/2011 12:49:08:
Los van elkaar werkt het trouwens natuurlijk wel,
maar op de manier die ik aangaf geeft hij meteen het totaal aan en niet eerst de prijs per module.
Los van het feit dat het je niet lukt wat is precies het probleem waar je tegenaan loopt? Dus krijg je een foutmelding oid? En wat is je volledige query.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
public function getPrice($adminid){
$result = mysql_query("
SELECT
list_modules.nl AS name,
lnk_administrations_modules.id_administration AS id_admin,
list_modules.basic AS price
FROM
lnk_administrations_modules
Inner Join list_modules ON lnk_administrations_modules.id_module = list_modules.id
WHERE
id_administration = ".$adminid) or die(mysql_error());
echo "<table>";
while( $overzicht = mysql_fetch_array( $result ) ){
echo "<tr><td class=dark>".$overzicht['name'] ."</td>
<td class=dark>".$overzicht['price']."</td></tr>";
}
echo "<tr><td class=dark>Totaal:</td>
<td class=dark>".TOTAAL."</td></tr> ";
echo " </table>";
?>
public function getPrice($adminid){
$result = mysql_query("
SELECT
list_modules.nl AS name,
lnk_administrations_modules.id_administration AS id_admin,
list_modules.basic AS price
FROM
lnk_administrations_modules
Inner Join list_modules ON lnk_administrations_modules.id_module = list_modules.id
WHERE
id_administration = ".$adminid) or die(mysql_error());
echo "<table>";
while( $overzicht = mysql_fetch_array( $result ) ){
echo "<tr><td class=dark>".$overzicht['name'] ."</td>
<td class=dark>".$overzicht['price']."</td></tr>";
}
echo "<tr><td class=dark>Totaal:</td>
<td class=dark>".TOTAAL."</td></tr> ";
echo " </table>";
?>
Daar waar ik TOTAAL heb staan zou ik dus het totaalbedrag willen hebben,
maar ik weet niet hoe ik dus de basic (of price zoals ik het genoemd heb) eerst los in een array kan krijgen maar daarna vervolgens ook een SUM erop kan toepassen.
Hij geeft nu netjes de modules en de prijs ervan weer in een tabel,
alleen met het totaalbedrag heb ik dus even problemen.
Toevoeging op 17/11/2011 13:29:00:
Overigens voor de rest geen foutmeldingen,
zo staat het niet in mijn originele script met TOTAAL, want dan zou ik een foutmelding krijgen natuurlijk.
Nu komt er dus zoiets uit:
Module1 €10
Module2 €15
Module3 €40
...
Nu wil ik dus hieronder
Totaal: €totaalbedrag
Met de SUM fuctie erbij, uitgevoerd op basic (price) krijg ik dit:
Module1 €65
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
public function getPrice($adminid) {
$sql = "
SELECT
list_modules.nl AS name,
lnk_administrations_modules.id_administration AS id_admin,
list_modules.basic AS price
FROM
lnk_administrations_modules
INNER JOIN
list_modules ON lnk_administrations_modules.id_module = list_modules.id
WHERE
id_administration = %d";
$result = mysql_query(sprintf($sql, $adminid)) or die(mysql_error());
echo "<table>";
$totals = array();
while( $overzicht = mysql_fetch_array( $result ) ){
$totals[] = $overzicht['price'];
echo "<tr><td class=dark>" . $overzicht['name'] . "</td>
<td class=dark>" . number_format($overzicht['price'],2,",",".") . "</td></tr>";
}
echo "<tr><td class=dark>Totaal:</td>
<td class=dark>" . number_format(array_sum($totals),2, ",", ".") . "</td></tr> ";
echo " </table>";
}
?>
public function getPrice($adminid) {
$sql = "
SELECT
list_modules.nl AS name,
lnk_administrations_modules.id_administration AS id_admin,
list_modules.basic AS price
FROM
lnk_administrations_modules
INNER JOIN
list_modules ON lnk_administrations_modules.id_module = list_modules.id
WHERE
id_administration = %d";
$result = mysql_query(sprintf($sql, $adminid)) or die(mysql_error());
echo "<table>";
$totals = array();
while( $overzicht = mysql_fetch_array( $result ) ){
$totals[] = $overzicht['price'];
echo "<tr><td class=dark>" . $overzicht['name'] . "</td>
<td class=dark>" . number_format($overzicht['price'],2,",",".") . "</td></tr>";
}
echo "<tr><td class=dark>Totaal:</td>
<td class=dark>" . number_format(array_sum($totals),2, ",", ".") . "</td></tr> ";
echo " </table>";
}
?>
Gewijzigd op 17/11/2011 15:04:10 door kees Schepers
Ik snap alleen niet waar in de query de %d voor staat, en hoe heb je dat nou precies opgelost? alleen maar door het in een array te zetten en erna uit te rekenen met array_sum?
En over de array_sum, ik doe eerst inderdaad alle prijzen in een array zetten en vervolgens uitrekenen met array_sum, zo simpel is het haha.
Toevoeging op 17/11/2011 16:41:59:
Overigens is het ook mogelijk in de query zoals Marijke deed
Ger, een array omdat je dan iets meer vrijheid hebt maar optellen in een variabele zou ook voldoen. In een query kan inderdaad wel maar dan zul je of een tweede query moeten maken of een subquery dus performance technisch is dat minder interresant.