Ik probeer een query te maken welke het totaalbedrag van alle producten a.d.h.v. de tabellen bestellingen en producten berekent.

Ik heb de volgende query
<?php
"SELECT
							SUM(besteldeproducten.aantal * besteldeproducten.prijs) AS totproducten 
						FROM 
							besteldeproducten, 
							bestellingen 
						WHERE 
							bestellingen.klantID = ".$_SESSION['userID']." 
						AND 
							besteldeproducten.bestellingsID = bestellingen.id";
?>


Maar hier komt een totaal verkeerd antwoord, namelijk 3749,85 terwijl dit 2499,90 moet zijn.

de structuur van de tabellen is:
[code]CREATE TABLE `besteldeproducten` (
`id` int(11) NOT NULL auto_increment,
`bestellingsID` int(11) NOT NULL,
`productID` int(11) NOT NULL,
`aantal` int(11) NOT NULL,
`prijs` decimal(10,2) NOT NULL,
`inkoopprijs` decimal(10,2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Tabel waar alle bestelde producten in staan.' AUTO_INCREMENT=7 ;

CREATE TABLE `bestellingen` (
`id` int(11) NOT NULL auto_increment,
`klantID` int(11) NOT NULL,
`status` varchar(255) NOT NULL,
`besteldatum` datetime NOT NULL,
`verzendkosten` enum('1','0') NOT NULL,
`verzendkostenbedrag` decimal(10,2) NOT NULL,
`opmerkingen` text NOT NULL,
`opmerkingenadmin` text NOT NULL,
`korting` decimal(10,2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Tabel waar alle bestellingen in staan' AUTO_INCREMENT=8 ;
<?php
"SELECT
SUM(t1.aantal * t1.prijs)
FROM
besteldeproducten AS t1,
bestellingen AS t2
WHERE
t2.klantID = ".$_SESSION['userID']."
AND
t1.bestellingsID = t2.id";
?>


Probeer zo eens?
zelfde resultaat, is in principe ook zo'n beetje dezelfde query natuurlijk.
Ik ben er intussen achter dat die 3749.85 het totaal is van alle besteldeproducten, ergens gaat het dus niet goed met selecteren van de specifieke bestelling.
AS totproducten

waar staat totproducten?
mmh, die had mebus er vergeten bij te zetten, maar stom genoeg bleef hij toch hetzelfde weergeven (en nee, niet vanwege de cache).

maar nu heb ik as totproducten er weer bijgezet, en nog steeds is het hetzelfde.

het moet toch ergens in die query zitten met betrekking tot het selecteren van de juiste producten uit de besteldeproducten tabel, maar in mijn ogen is het goed.
Echo de sql eens het klinkt namelijk of hij niet op user nivo kijkt omdat je zegt dat het totaal gereturned wordt
@klaasjan, dat is het nu net, omdat alles door de database afgehandeld wordt kun je niet zien wat er bij die where ingevuld wordt omdat de query gewoon zo in beeld verschijnt als hij in de code staat.
pas als hij bij de database komt worden die dingen ingevuld door de database.

persoonlijk denk ik dat het in die bestellingen.id moet zitten, maar het lijkt mij deze toch gewoon goed is?
ik heb bestellingen.id eens even verandert in een variabele die zeker weten inhoud heeft, dit had wel enig resultaat. het bedrag ging omlaag, maar het was nog niet goed.

resultaten zijn als volgt:

ik heb 1 product van 249.99 met aantal 1
bij bestellingen.id komt hier uit 749.97 (= 3 x 249.99)
bij $bestellingsID komt hier uit 499.98 (= 2 x 249.99)
Er zit dus een patroon in op de een of andere manier.

inhoud van tabel besteldeproducten is als volgt:
INSERT INTO `besteldeproducten` (`id`, `bestellingsID`, `productID`, `aantal`, `prijs`, `inkoopprijs`) 
VALUES 
(7, 8, 4, 2, 249.99, 185.87),
(8, 9, 4, 1, 249.99, 185.87),
(9, 9, 1, 1, 249.99, 142.99),
(10, 5, 1, 1, 249.99, 142.99),
(11, 10, 4, 1, 249.99, 185.87);

Reageren