hermesias: komplizierte Join-Abfrage mit rechenoperatoren

Guten Abend ins Forum! Ich (Florian) bin erst gerade offiziell dazu gestoßen. Bislang habe ich immer alles in Beträgen gefunden und konnte so meinen Code entwickeln, aber nun wird meine Problemstellung doch zu komplex und ich muss euch Experten fragen:

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.

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.

Geht das überhaupt über eine JOIN Abfrage mit Rechenoperatoren oder muss ich das irgendwie anders lösen?

freue mich sehr über Antworten

  1. Hallo hermesias,

    das geht definitiv, wird aber ein ziemlich fettes SQL Statement. Guck ich mir nachher mal an.

    Mich irritiert nur, dass da ein paar Vereinfachungen drin sind, die die Aufgabe praxisfremd machen. Z.b. das getrennte Ausweisen der Mehrwertsteuer oder Versandkosten, die ab einer bestimmten Rechnungssumme entfallen.

    Angesichts der hohen Lehrerdichte im Selfhtml-Forum gibt es die Übereinkunft, anderen nicht die Hausaufgaben zu machen. Auch und erst recht nicht für Fachinformatiker. In Schule oder Uni ist das eigentlich zu komplex für eine Hausaufgabe. Hm…

    Rolf

    --
    sumpsi - posui - obstruxi
  2. 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