Tobias Menzel
Erfahrenes Mitglied
Hi,
Folgendes Szenario: Ich habe in einem Shop die Tabellen "kunden" und "bestellungen". Bei jeder neuen Bestellung wird in letzterer ein Datensatz u.a. mit der Bestellsumme und der Kunden-ID abgelegt. Nun soll nicht bei jeder Bestellung eine Rechnung ausgestellt werden, sondern erst wenn die Summe getätigter Bestellungen einen bestimmten Betrag übersteigt.
Ich möchte also (mit möglichst wenigen Abfragen) die Kunden (und die dazugehörigen Bestellungen) erhalten, deren Bestellungen einen Maximalbetrag überschreiten. In den Rechnungen sollen auch alle enthaltenen Bestellungen aufgelistet werden.
Da ich (zugegebenermaßen) das Prinzip von JOIN und Subselects noch nicht ganz verstanden habe, gehe ich (in PHP) recht umständlich so vor:
Dies ist natürlich nicht besonders performant. Ich würde mich daher freuen, wenn mir jemand einen Denkanstoß für eine Optimierung geben könnte.
Grüße,
Tobi
Folgendes Szenario: Ich habe in einem Shop die Tabellen "kunden" und "bestellungen". Bei jeder neuen Bestellung wird in letzterer ein Datensatz u.a. mit der Bestellsumme und der Kunden-ID abgelegt. Nun soll nicht bei jeder Bestellung eine Rechnung ausgestellt werden, sondern erst wenn die Summe getätigter Bestellungen einen bestimmten Betrag übersteigt.
Ich möchte also (mit möglichst wenigen Abfragen) die Kunden (und die dazugehörigen Bestellungen) erhalten, deren Bestellungen einen Maximalbetrag überschreiten. In den Rechnungen sollen auch alle enthaltenen Bestellungen aufgelistet werden.
Da ich (zugegebenermaßen) das Prinzip von JOIN und Subselects noch nicht ganz verstanden habe, gehe ich (in PHP) recht umständlich so vor:
- SELECT kunde FROM bestellungen WHERE status=0 GROUP BY kunde
( "status" ist ein Flag: 0=Rechnung noch nicht ausgestellt )
- Für alle auf diese Weise erhaltenen Kunden:
SELECT * FROM bestellungen WHERE kunde=KUNDE AND status=0
- Alle auf diese Weise erhaltenen Bestellungen summiere ich, und liste sie auf, wenn der Betrag meinen Zielbetrag übersteigt. (der Status aller Rechnungen wird in einer weiteren Abfrage auf 1 (ausgestellt) gesetzt.
Dies ist natürlich nicht besonders performant. Ich würde mich daher freuen, wenn mir jemand einen Denkanstoß für eine Optimierung geben könnte.
Grüße,
Tobi