MySQL-Result per array in Teilsummen (Gruppensummen) kumulieren

print147

Grünschnabel
Mit folgender Query kann ich für die Warenkorb-Tabelle die Gesamtpreise für die
einzelnen Artikel errechnen und den Gesamtpreis für alle Artikel und Gruppen:

warenkorb_print153.gif
PHP:
include("../admin/dbconnect.php");
$q  =   "   SELECT group_id, menge * preis as artGesPreis FROM warenkorb ORDER BY group_id asc ";
$r  =   mysql_query($q) or die(mysql_error());
$gesPreis   =   '';
while($rows = mysql_fetch_array($r))
{
    echo "Artikelgesamtpreis: ".$rows['artGesPreis']."<br>";
    $gesPreis   +=  $rows['artGesPreis'];
}
echo "Gesamtpreis aller Artikel und Gruppen: ".$gesPreis."<br>";
/*
Artikelgesamtpreis: 40.00
Artikelgesamtpreis: 10.00
Artikelgesamtpreis: 60.00
Gesamtpreis aller Artikel und Gruppen: 110
*/

Wie kann ich aus diesem Query-Result die Gesamtpreise pro Gruppe ( = 50 und 60) ermitteln, ohne daß ich eine weitere Query mit Select ... GROUP BY group_id aufstellen muß?
Vielen Dank im voraus für Eure Hilfe!
 
Wenn die Einzel-Infos sowieso schon in der Scriptsprache vorhanden sind, dann rechne sie doch einfach dort zusammen. Das in ein Query zu klatschen würde nur den Vorteil bringen, Programmiersprachenunabhängig zu sein. Mal davon ab, das es höchstens noch durch ein Sub-Select zu bewerkstelligen ist. Wenn du es aber wirklich über Sub-Select lösen willst:

Code:
SELECT x.group_id as gruppen_id, 
(x.menge*x.preis) as posten_preis, 
(SELECT SUM(a.menge*a.preis) FROM warenkorb a) as gesamt_preis, 
(SELECT SUM(b.menge*b.preis) FROM warenkorb b WHERE b.group_id = x.group_id) as gruppen_preis
FROM warenkorb x

Code:
SQL-Abfrageergebnis

Host: 127.0.0.1
Datenbank: test
Erstellungszeit: 14. Okt 2012 um 12:40
Erstellt von: phpMyAdmin 3.5.0 / MySQL 5.5.25
SQL-Befehl: SELECT x.group_id as gruppen_id, (x.menge*x.preis) as posten_preis, (SELECT SUM(a.menge*a.preis) FROM warenkorb a) as gesamt_preis, (SELECT SUM(b.menge*b.preis) FROM warenkorb b WHERE b.group_id = x.group_id) as gruppen_preis FROM warenkorb x;
Datensätze: 3
gruppen_id 	posten_preis 	gesamt_preis 	gruppen_preis
1 	                40.00 	        110.00 	        50.00
1 	                10.00 	        110.00 	        50.00
2 	                60.00 	        110.00 	        60.00
 
Vorsicht, bei grösseren Datenmengen ist diese Lösung sehr unperformant.

Warum nicht einfach mit WITH ROLLUP arbeiten? Gibt dann pro Gruppenlevel eine Summe aus

SQL:
SELECT 
	group_id, 
	menge * preis as artGesPreis 
FROM 
	warenkorb
WITH ROLLUP



Code:
group_id | artGesPreis 
       1 | 30
       2 | 30 
    NULL | 60

Natürlich kann man das auch auf einer detailierten Stufe anwenden.
 
Zuletzt bearbeitet von einem Moderator:
Zurück