Moin Florian,
Meine Datenbank hat folgende Tabellen:
- TBL_kunden
- TBL_rechnungen
- TBL_artikel
- TBL_warenkorb
Den einzelnen Rechnungen werden mittels Kundennummer 'k_id' Kunden zugeordnet. Anhand von Positionen in der Tabelle Warenkorb wird ersichtlich in welcher Rechnung (r_id) welche Menge (menge) der einzelnen Artikel (a_id) aus der Tabelle TBL_artikel gekauft wird. In der Tabelle TBL_artikel ist hinterlegt, welcher Artikel zu welchem Preis angeboten wird.
Wenn der Preis nachträglich geändert wird, ändert sich demnach auch die Rechnung – nachträglich! In einem statischen Beispiel kann man das ignorieren, in einer echten Anwendung muss das im Design berücksichtigt werden.
Auflistung der Rechnungen anhand r_id:
- Ermittle in der Tabelle 'TBL_kunden' zu wem die eingetragene Kundennummer (k_id) gehört.
- Wähle aus der Tabelle 'TBL_warenkorb' alle Positionen aus, die die gleiche Rechnungs-id 'r_id' haben.
- Suche nun anhand der Artikel-id der Positionen in der Tabelle 'TBL_artikel' den jeweiligen Preis 'preis' aus.
- multipliziere ihn mit der angeforderten Menge 'menge' der Artikel in der Tabelle TBL_warenkorb.
- Summiere diese einzelnen Positionen zu einem Zwischenergebnis, dem noch das veranschlagte Porto aus der TBL_rechnungen hinzugefügt wird.
Gib die Liste aller Rechnungen als Tabelle per php script aus, - mit den Spalten: r_id, kunde, rechnungsdatum, gesamtbetrag.
Das liest sich wie eine (von außen) vorgegebene Aufgabenstellung, eventuell eine Hausaufgabe, wie Rolf vermutet. Das Motto von SELFHTML ist Die Energie des Verstehens, daher werden im Forum Anregungen und Hilfestellungen gegeben, aber keine Aufgaben gelöst.
Was in Deinem Fall vielleicht hilft, ist sich die Tabellen und ihre Beziehungen einmal aufzuzeichnen. Anschließend überlegst Du Dir wie die entsprechenden SELECT
-Statements für die oben genannten Teilabfragen aussehen. Von dort aus kannst Du die Statements und Ergebnismengen nach und nach zusammenführen („joinen“).
Geht das überhaupt über eine JOIN Abfrage mit Rechenoperatoren oder muss ich das irgendwie anders lösen?
SQL bietet die Standard-Rechenoperationen, die dafür nötig sind, z.B.
-- Füge Umsatzsteuer hinzu:
SELECT preis * 1.19 AS brutto_preis FROM TBL_artikel /* WHERE … */;
-- Ziehe festen Rabatt von 1 € (entsprechend 100 Cent) ab:
SELECT preis - 100 AS angebots_preis FROM TBL_artikel /* WHERE … */;
-- Oder: Rabatt auf den Bruttopreis:
SELECT preis * 1.19 - 100 AS brutto_preis FROM TBL_artikel /* WHERE … */;
-- bzw. Rabatt auf den Nettopreis:
SELECT (preis - 100) * 1.19 AS brutto_preis FROM TBL_artikel /* WHERE … */;
Wahrscheinlich sind auch Aggregatfunktionen wie SUM
für Dich interessant.
Viele Grüße
Robert