Hallo,
ich habe ein Problem, an dem ich jetzt schon stundenlang/tagelang versuche, es zu lösen - aber irgendwie klappt es nie ganz...
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
ich habe ein Problem, an dem ich jetzt schon stundenlang/tagelang versuche, es zu lösen - aber irgendwie klappt es nie ganz...
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