Optellen in MySql database
Beste mensen,
Ik heb een 2-tal vragen:
1) Ik heb een kaarten bestelsysteem waarin ik graag ALLE kaarten bij elkaar opgeteld wil zien (Klant 1 heeft 3 kaarten, klant 2 heeft 5 kaarten). Alle kaarten kosten 9,50 per stuk.
2) Aan de kaarten hangt ook een prijs. Het totaalbedrag per klant is hierbij makkelijk te berekenen (2 kaarten x 9.50), maar hoe doe ik dat nu met het TOTAAL aantal kaarten in de gehele database en de bedragen hierbij?
Wie kan en wil me hierbij helpen?
Groetjes,
Nanno
Ik heb een 2-tal vragen:
1) Ik heb een kaarten bestelsysteem waarin ik graag ALLE kaarten bij elkaar opgeteld wil zien (Klant 1 heeft 3 kaarten, klant 2 heeft 5 kaarten). Alle kaarten kosten 9,50 per stuk.
2) Aan de kaarten hangt ook een prijs. Het totaalbedrag per klant is hierbij makkelijk te berekenen (2 kaarten x 9.50), maar hoe doe ik dat nu met het TOTAAL aantal kaarten in de gehele database en de bedragen hierbij?
Wie kan en wil me hierbij helpen?
Groetjes,
Nanno
@Nanno, kun je iets meer vertellen over welke tabellen en velden je hebt.
In principe kan dit bijv:
In principe kan dit bijv:
Gewijzigd op 26/05/2016 20:36:54 door Jan de Laet
@Jan
Ik heb nu dit:
$sql6 = "SELECT SUM(Kaarten * Aangepaste_prijs) FROM Kaarten";
$result6 = mysql_query($sql6);
Als ik $result6 echo, dan krijg ik dit: Resource id #1135
De prijs staat in de database als 9.50
Ik zou graag het totaalbedrag met decimalen willen zien. Hoe voer ik dit uit?
P.S. De tabel heet Kaarten en de kolom aantal heet ook Kaarten. Was toen een beetje dom bedacht van mezelf.
Ik heb nu dit:
$sql6 = "SELECT SUM(Kaarten * Aangepaste_prijs) FROM Kaarten";
$result6 = mysql_query($sql6);
Als ik $result6 echo, dan krijg ik dit: Resource id #1135
De prijs staat in de database als 9.50
Ik zou graag het totaalbedrag met decimalen willen zien. Hoe voer ik dit uit?
P.S. De tabel heet Kaarten en de kolom aantal heet ook Kaarten. Was toen een beetje dom bedacht van mezelf.
Gewijzigd op 26/05/2016 21:40:05 door Nanno Koerts
Een querie geeft niet het uiteindelijke resultaat weer. Je zult deze eerst nog moeten fetchen met bijv. mysql_fetch_assoc().
Verder zijn de mysql_*() functies ook verouderd. Gebruik liever MySQLi of PDO.
Verder zijn de mysql_*() functies ook verouderd. Gebruik liever MySQLi of PDO.
Aangenomen dat de tabel bestellingen heet, met kolommen klant_id, klant_naam en klant_besteld.
Met deze regel krijg je het aantal bestelde kaarten met totaalprijs per klant :
Met deze regel krijg je het totaal bestelde kaarten met totaalprijs :
De WHERE moet je naar eigen inzicht gebruiken.
Bovenstaand kan je vinden in de MySQL handleiding.
Met PHP kan je de velden invullen m.b.v. variabelen.
PS de queries had ik al voorbereid, ze komen dus niet overeen met de latere posts.
Met deze regel krijg je het aantal bestelde kaarten met totaalprijs per klant :
Code (php)
1
SELECT klant_naam AS klant , "9,50" AS prijs, SUM(klant_besteld) AS aantal, SUM(klant_besteld) * 9.50 AS totaal FROM bestellingen WHERE klant_id <= 5 GROUP BY klant_id;
Met deze regel krijg je het totaal bestelde kaarten met totaalprijs :
Code (php)
1
SELECT "9,50" AS prijs, SUM(klant_besteld) AS aantal, SUM(klant_besteld) * 9.50 AS totaal FROM bestellingen WHERE klant_id <= 5;
De WHERE moet je naar eigen inzicht gebruiken.
Bovenstaand kan je vinden in de MySQL handleiding.
Met PHP kan je de velden invullen m.b.v. variabelen.
PS de queries had ik al voorbereid, ze komen dus niet overeen met de latere posts.
Ik sluit me aan bij wat Ariën zegt over fetch en gebruik van verouderde functies.
Voor weergave met 2 decimalen, kun je doen:
ROUND(SUM(Kaarten * Aangepaste_prijs), 2)
Toevoeging op 26/05/2016 22:02:50:
@Adoptive, het is een goede gewoonte en aanrader om bij GROUP BY alle velden te noemen die niet als SUM ,MAX, MIN, of dergelijke worden gebruikt.
Dus ik zou dit doen:
Voor weergave met 2 decimalen, kun je doen:
ROUND(SUM(Kaarten * Aangepaste_prijs), 2)
Toevoeging op 26/05/2016 22:02:50:
@Adoptive, het is een goede gewoonte en aanrader om bij GROUP BY alle velden te noemen die niet als SUM ,MAX, MIN, of dergelijke worden gebruikt.
Dus ik zou dit doen:
Voor wie het wil proberen :
http://adoptive.esy.es/kaartjes/
Hier de code :
http://adoptive.esy.es/kaartjes/kaartjes.txt
E.e.a. is wat aangepast, maar resultaat is hetzelfde.
http://adoptive.esy.es/kaartjes/
Hier de code :
http://adoptive.esy.es/kaartjes/kaartjes.txt
E.e.a. is wat aangepast, maar resultaat is hetzelfde.
@Jan: het is niet alleen een goede gewoonte om alle non-aggregrates in je GROUP BY te zetten, het is een vereiste, anders krijg je zinloze resultaten. Maar dat wist je natuurlijk al.
@Adoptive: leuk dat je een voorbeeld online zet, maar zet je SQL mode eens op strict, dan zie je dat je queries niet kloppen.
@Adoptive: leuk dat je een voorbeeld online zet, maar zet je SQL mode eens op strict, dan zie je dat je queries niet kloppen.




