Mik3e
Erfahrenes Mitglied
Hi!
Hab dezente Join Troubles zwischen vier Tabellen... (wahrscheinlich steh ich auch nur auf der Leitung)
Vier Tabellen:
1. tbl_buchung
2. tbl_kunde
3. tbl_produkte
4. tbl_transaction_log
Beispieldaten:
-----------------------------------------------------------------------------
# tbl_buchung:
buchungID | buchungDatum
4711 | 01.09.2005
# tbl_kunde: 1:1 Beziehung zu tbl_buchung
kundeID | fkbuchungID | name
1 | 4711 | manfred
# tbl_produkte 1:n Beziehung zu tbl_buchung
produktID | fkbuchungID | preis
1 | 4711 | 10.00
2 | 4711 | 20.00
3 | 4711 | 25.00
# tbl_transaction_log 1:n Beziehung zu tbl_buchung
logID | fkbuchungID | aktion | bezahlartID
1 | 4711 | INITIATED | 001
2 | 4711 | RESERVED | 001
3 | 4711 | BILLED | 001
-----------------------------------------------------------------------------
Aufgabenstellung:
Wie ihr sicher erkannt habt, handelt es sich dabei um ein Bestellsystem. Die Tabelle tbl_transaction_log dient zum Loggen des Online-Payment Processes. Dieser besteht für gewöhnlich aus 2-3 Schritten (im Beispiel 3). Es soll nun ein Report generiert werden, der alle Buchungen enthält sowie die Angabe der Anzahl an Produkten und Gesamtwert der Buchung (COUNT und SUM von tbl_produkte pro Buchung).
Ich benötige jedenfalls die bezahlartID aus der Tabelle tbl_transaction_log...
Und hier ist auch schon das Problem:
Wird die tbl_transaction_log gejoint, wird die SUMME und die ANZAHL an Produkten mit der im tbl_transaction_log hinterlegten Datensatzanzahl multipliziert (hier also *3). Und das trotz INNER JOIN..
Hier der SQL QUERY:
Dieser Query liefert folgendes (falsches) Resultat:
buchungID | name | produktanzahl | buchung_preis
-------------------------------------------------------------------------
4711 | Manfred | 9 | 165.00
Richtig wäre:
buchungID | name | produktanzahl | buchung_preis
-------------------------------------------------------------------------
4711 | Manfred | 3 | 55.00
Könnt Ihr mir einen Tipp geben, wo mein Denkfehler liegt?!
Wäre toll!
Danke & LG
Mike
Hab dezente Join Troubles zwischen vier Tabellen... (wahrscheinlich steh ich auch nur auf der Leitung)
Vier Tabellen:
1. tbl_buchung
2. tbl_kunde
3. tbl_produkte
4. tbl_transaction_log
Beispieldaten:
-----------------------------------------------------------------------------
# tbl_buchung:
buchungID | buchungDatum
4711 | 01.09.2005
# tbl_kunde: 1:1 Beziehung zu tbl_buchung
kundeID | fkbuchungID | name
1 | 4711 | manfred
# tbl_produkte 1:n Beziehung zu tbl_buchung
produktID | fkbuchungID | preis
1 | 4711 | 10.00
2 | 4711 | 20.00
3 | 4711 | 25.00
# tbl_transaction_log 1:n Beziehung zu tbl_buchung
logID | fkbuchungID | aktion | bezahlartID
1 | 4711 | INITIATED | 001
2 | 4711 | RESERVED | 001
3 | 4711 | BILLED | 001
-----------------------------------------------------------------------------
Aufgabenstellung:
Wie ihr sicher erkannt habt, handelt es sich dabei um ein Bestellsystem. Die Tabelle tbl_transaction_log dient zum Loggen des Online-Payment Processes. Dieser besteht für gewöhnlich aus 2-3 Schritten (im Beispiel 3). Es soll nun ein Report generiert werden, der alle Buchungen enthält sowie die Angabe der Anzahl an Produkten und Gesamtwert der Buchung (COUNT und SUM von tbl_produkte pro Buchung).
Ich benötige jedenfalls die bezahlartID aus der Tabelle tbl_transaction_log...
Und hier ist auch schon das Problem:
Wird die tbl_transaction_log gejoint, wird die SUMME und die ANZAHL an Produkten mit der im tbl_transaction_log hinterlegten Datensatzanzahl multipliziert (hier also *3). Und das trotz INNER JOIN..
Hier der SQL QUERY:
Code:
SELECT tbl_buchung.`buchungID` AS `buchungID`
tbl_kunde.`name` AS `name`,
COUNT(tbl_produkte.`produktID`) AS `produktanzahl`,
SUM(tbl_produkte.`preis`) AS `buchung_preis` '
FROM `tbl_buchung` AS `tbl_buchung`
INNER JOIN `tbl_kunde` AS tbl_kunde ON tbl_buchung.`pk_buchung_id`=tbl_kunde.`fkbuchungID` '
INNER JOIN `tbl_produkte` AS tbl_produkte ON tbl_buchung.`pk_buchung_id`=tbl_produkte.`fkbuchungID` '
INNER JOIN `tbl_buchung_transaction_log` AS tbl_buchung_transaction_log ON tbl_buchung.`pk_buchung_id`=tbl_buchung_transaction_log.`fkbuchungID`
WHERE 1>0 '
GROUP BY tbl_buchung.`buchungID`
buchungID | name | produktanzahl | buchung_preis
-------------------------------------------------------------------------
4711 | Manfred | 9 | 165.00
Richtig wäre:
buchungID | name | produktanzahl | buchung_preis
-------------------------------------------------------------------------
4711 | Manfred | 3 | 55.00
Könnt Ihr mir einen Tipp geben, wo mein Denkfehler liegt?!
Wäre toll!
Danke & LG
Mike