Problem MySQL-Abfrage

Magical

Angesehenes Mitglied
Hallo,

ich habe ein Problem, an dem ich jetzt schon stundenlang/tagelang versuche, es zu lösen - aber irgendwie klappt es nie ganz...
sad.gif


Folgendes Problem besteht:
Ich habe mehrere Tabellen - unter anderem eine Extra-Tabelle für Angebote und eine Verknüpfungstabelle Ersparnisse & Angebote & Produkte

Nun möchte ich verschiedene Werte aus Prudukte, Preise(Standardpreise), Hersteller, Produktart sowie zusätzlich die Summe der aktuellen Ersparnisse je Produkt sowie den reduzierten Preis je Produkt gerechnet auf eine bestimmte Dauer.

Momentane Situation (verkürzt):
Select produkte.id as id,
produkte.name as produkt_name,
produkt_price.price as price,
produkt.laufzeit as laufzeit,
hersteller_name as hersteller,
hersteller.id as hersteller_id,
produktart_kind as produktart,
sum(angebote_ersparnisse.ersparniss) as ersparniss, Round((((produkt_price.price*produkt.laufzeit)-(COALESCE(SUM(angebote_ersparnisse.ersparniss),0)))/produkt.laufzeit),2) as durchschnittspreis

FROM produkte
LEFT JOIN produkt_price ON produkte.id = produkte_price.produkt_id
LEFT JOIN hersteller ON produkte.hersteller_id = hersteller.id
LEFT JOIN angebote_ersparnisse ON produkte.id = angebote_ersparniss.produkt_id
LEFT JOIN angebote ON angebot_ersparniss.angebot_id = angebote.id AND angebote.valid_from <= NOW() AND angebote.valid_till >= NOW()

WHERE
produkt_price.valid_from <= NOW() AND
produkt_price.valid_till >= NOW()

GROUP BY produkte.id
ORDER BY durchschnittspreis

Die Berechnung und Ausgabe funktioniert soweit.
Das einzige Problem ist, dass es die Summe aller Ersparnisse zu einem Produkt nimmt, ohne die Laufzeit des Angebots zu berücksichtigen.
Ich habe jetzt schon verschiedene Dinge versucht (Umstellungen) und auch schon nach verschiedenen Dingen gesucht, um hierfür eine Lösung zu finden.
Aber eine Subquery für die Summe funktioniert nicht, da ich einen Wert für jedes Produkt benötige.
Wenn ich die Zeitbeschränkung für die Angebote mit in die Where-Klausel packe, dann werden nur die Produkte mit aktuellem Angebot angezeigt, aber nicht die ohne Angebot..

Und sonst konnte ich auch keine Möglichkeit finden, um nur einen Select-Wert durch zusätzliche Bedingungen einzuschränken.
Ich habe hierfür eine MySQL-Datenbank in der Version 4.0.21, könnte aber das Projekt auch umziehen auf einen Virtual Server mit MYSQL-Version 5.0.32 (falls es für die ältere Version keine vernünftige Lösung gibt)


Hat hierzu vielleicht jemand eine Idee, was helfen könnte? - eine Lösung oder auch ein Ansatz, mit dem ich weitersuchen könnte??

Vielen Dank bereits vorab für eure Hilfe.

magical
 
QUOTE LEFT JOIN angebote_ersparnisse ON produkte.id = angebote_ersparniss.produkt_id
LEFT JOIN angebote ON angebot_ersparniss.angebot_id = angebote.id AND angebote.valid_from <= NOW()


Du holst Dir zuerst alle Ersparnisse dazu und willst mit einem weiteren LEFT JOIN hinterher überprüfen, ob das Angebot noch gültig ist?! Mach es umgekehrt, dann funktioniert es auch: Mit einer Subquery die aktuell gültigen Angebote bzw. Ersparnisse Abfragen und diese dann mit LEFT JOIN zum Rest hinzufügen.
 
Vielen Dank.
Diese Überlegung hatte ich auch ... allerdings vorher nicht an der richtigen Stelle umgesetzt.

Mit dem subselect an der richtigen Stelle funktioniert es jetzt - das bedeutet dann wohl den Umzug für das Projekt...
 
Zurück
Oben