Ik ben bezig om een pagina te maken waar alle bestellingen van de webshop in kaart worden gebracht. Ik heb nu de volgende data uit de database:

2012 - 38
Afvalsoort: Houtafval
Container: Afvalcontainer 6m3
Aantal orders: 1
Totaal: € 194.00

2012 - 38
Afvalsoort: Restafval
Container: Afvalcontainer 4m3
Aantal orders: 1
Totaal: € 145.00

2012 - 37
Afvalsoort: Puinafval
Container: Afvalcontainer 10m3
Aantal orders: 1
Totaal: € 139.00

2012 - 37
Afvalsoort: Restafval
Container: Afvalcontainer 4m3
Aantal orders: 1
Totaal: € 155.00

Maar nu is mijn vraag om per week alles bij elkaar te doen. Hieronder staat wat ik uiteindelijk wil hebben.

Week 38 Afvalsoort Container
Bouw- en sloopafval Afvalcontainer 4m3
Houtafval Afvalcontainer 6m3
Restafval Afvalcontainer 4m3
Totaal orders: 3
Totaal bedrag: € 484

Week 37 Afvalsoort Container
Puinafval Afvalcontainer 2,5m3
Groenafval Afvalcontainer 10m3
Totaal orders: 2
Totaal bedrag: € 729

En dit is mijn code:


$res2 = mysql_query("SELECT `content`, YEARWEEK(`updated_at`,1) AS week, YEAR(`updated_at`) AS jaar, COUNT(`id`) as id, SUM(`price_total`) AS totaal
FROM `cart`
WHERE order_status = 'completed (not payed)' or order_status = 'completed (not payed)'
GROUP BY `id`
ORDER BY week DESC, jaar DESC");
while ($arr2 = mysql_fetch_assoc($res2)){

$string2 = $arr2['content'];
$array2 = unserialize($string2);

echo $arr2["jaar"]." - ".substr($arr2["week"], -2)."<br />";

echo "Afvalsoort: ";
if ($array2[0]['choice_waste'] == 3) { echo 'Groenafval'; }
if ($array2[0]['choice_waste'] == 4) { echo 'Houtafval'; }
if ($array2[0]['choice_waste'] == 5) { echo 'Bouw- en sloopafval'; }
if ($array2[0]['choice_waste'] == 6) { echo 'Dakafval'; }
if ($array2[0]['choice_waste'] == 7) { echo 'Grond en zand'; }
if ($array2[0]['choice_waste'] == 8 OR $array2[3]['choice_waste'] == 8) { echo 'Puinafval'; }
if ($array2[0]['choice_waste'] == 9) { echo 'Restafval'; }
if ($array2[0]['choice_waste'] == 10) { echo 'All-in'; }
echo "<br />";

echo "Container: ";
if ($array2[0]['choice_container'] == 10 OR $array2[3]['choice_container'] == 10) { echo 'Big-bag'; }
if ($array2[0]['choice_container'] == 11) { echo 'Afvalcontainer 2,5m3'; }
if ($array2[0]['choice_container'] == 12) { echo 'Afvalcontainer 6m3'; }
if ($array2[0]['choice_container'] == 13) { echo 'Afvalcontainer 7m3'; }
if ($array2[0]['choice_container'] == 14) { echo 'Afvalcontainer 10m3'; }
if ($array2[0]['choice_container'] == 15) { echo 'Afvalcontainer 10m3'; }
if ($array2[0]['choice_container'] == 16) { echo 'Afvalcontainer 24m3'; }
if ($array2[0]['choice_container'] == 17) { echo 'Afvalcontainer 40m3'; }
if ($array2[0]['choice_container'] == 18) { echo 'Afvalcontainer 4m3'; }
if ($array2[0]['choice_container'] == 19) { echo 'Afvalcontainer 11m3'; }
if ($array2[0]['choice_container'] == 20) { echo 'Afvalcontainer 4,5m3'; }
echo "<br />";

echo "Aantal orders: ". $arr2["id"]."<br />";
echo "Totaal: € ".$arr2["totaal"]."<br /><br />";

}

Hopelijk kan iemand me helpen..
Ja ik vind het ook waardeloos maar goed!! Ik loop stage bij het bedrijf van de webshop. Maar ik wil toch een overzicht hebben van de bestellingen en dat doe ik buiten Symfony om. Maar wel met de gegevens uit de database. En ik denk dat het ook wel moet kunnen. Alleen ergens zit er iets raars fout waardoor hij de verkeerde Orders en Bedragen op gaat tellen..
Pim zet de php code eens tussen bbcode tags (code /code tussen []), dat maakt het wat beter leesbaar.
Zoals als ik nu kan zien reset je de waardes op het verkeerde moment, dat zou aan het begin van de while moeten:

<?php
$yearweek = 0;
while ($row = mysql_fetch_assoc($result) {
	if ($row['week'] != $yearweek) {
		if ($yearweek != 0) {
		 //toon de totalen
			echo 'Aantal orders: ' . $amount .
				'Totaal &euro;' . $total;
		}
		$yearweek = $row['week'];
		//reset de totalen
		$amount = 0;
		$total = 0.00;
		//start nieuwe groep
	}
	$amount += 1;
	$total += $row['total'];
	//toon de  rest
}
?> 

Je hebt dus nu geen groupby meer nodig in de query omdat je dit in PHP afhandeld.

@GER: Mooie query!!
@PIM, jammer dat je het toch anders doet en de gegevens in PHP gaat zitten processen. Verder zouden de hard gecodeerde waarden zoals 'Groenafval', 'Houtafval' en dergelijke ook in code-tabellen moeten zodat je desgewenst kan uitbreiden zonder al je code te hoeven wijzigen. Een kwestie van goed datamodelleren dus. Helaas is dat bij heel veel php ontwikkelaars een stiefkindje en wordt er enorm veel data onnodig opgehaald en in php geprocessed om een kleinigheidje te tonen.
@Ozzie er zijn voldoende boeken die diepgaand SQL behandelen, alternatief zijn cursussen maar die zijn veelal erg duur.
John D op 19/09/2012 15:41:52

Een kwestie van goed datamodelleren dus. Helaas is dat bij heel veel php ontwikkelaars een stiefkindje en wordt er enorm veel data onnodig opgehaald en in php geprocessed om een kleinigheidje te tonen.

Lees voor php ontwikkelaars maar gewoon ontwikkelaars in het algemeen. Je wilt niet weten hoeveel broekafzakkers ik al tegenkomen ben, zelfs bij zich professioneel voordoende ontwikkelaars.

Maar dit is wel een heel goed voorbeeld hoe het niet moet, daar kan TS niets aan doen want die moet roeien met de eetlepels die hij heeft.

Heb het toch voor elkaar gekregen!!

Heb deze regels:
$total_orders++;
$total += $arr2["totaal"];
verplaatst naar na de if ($prev_week != $week) {

Bedankt voor jullie moeite!

Reageren