Optellen in MySql database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Nanno Koerts

Nanno Koerts

26/05/2016 19:42:42
Quote Anchor link
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
 
PHP hulp

PHP hulp

22/12/2024 18:27:23
 
Jan de Laet

Jan de Laet

26/05/2016 20:35:42
Quote Anchor link
@Nanno, kun je iets meer vertellen over welke tabellen en velden je hebt.

In principe kan dit bijv:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT SUM(aantal * prijs) FROM bestellingen
Gewijzigd op 26/05/2016 20:36:54 door Jan de Laet
 
Nanno Koerts

Nanno Koerts

26/05/2016 21:38:08
Quote Anchor link
@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.
Gewijzigd op 26/05/2016 21:40:05 door Nanno Koerts
 
- Ariën  -
Beheerder

- Ariën -

26/05/2016 21:46:24
Quote Anchor link
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.
 
Adoptive Solution

Adoptive Solution

26/05/2016 21:58:51
Quote Anchor link
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 :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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)
PHP script in nieuw venster Selecteer het PHP script
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.
 
Jan de Laet

Jan de Laet

26/05/2016 21:58:55
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
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_naam, prijs;
 
Adoptive Solution

Adoptive Solution

27/05/2016 13:57:33
Quote Anchor link
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.
 
Ben van Velzen

Ben van Velzen

27/05/2016 14:40:06
Quote Anchor link
@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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.