Frage zu Select-Abfrage

Hallo:smile:

Ich habe da eine interessante Idee:

Nehmen wir an, ich habe für einen Online-shop 3 Tabellen:

  1. Artikel:

id | bezeichnung | usw

1 | Beispiel01 |

  1. Preis:

pid | preis

1 | 20.00

  1. Angebote:

aid | preis | Verfallsdatum

1 | 10.00 | 15.02.2007

„Verfallsdatum“ sei dabei das Datum, an dem ein Angebot ausläuft.
Die Preise 20.00 und 10.00 in Tabelle 2) und 3) beziehen sich auf den selben Artikel „Beispiel01“, dh. bis zum 15.2.2007 soll der Preis nur die Hälfte betragen.

Jetzt meine Frage:
Ist es Möglich, per Join jedem Artikel in Tabelle 1 einen Preis entweder aus Tabelle 2 oder Tabelle 3 zuzuweisen, also im Normalfall aus Tabelle 2) , falls ein aktuelles Angebot besteht aber aus Tabelle 3)
So eine Abfrage wäre natürlich super und würde hinterher bei php eine Menge Arbeit sparen.

Gruß, Andreas

Hallo Andreas,

warum brauchst Du drei Tabellen? Der Preis ist eine direkte Eigenschaft des Artikels, das Ausgrenzen finde ich unnötig, außer Du bindest noch spezielle Preislisten daran.

Angenommen, Du hättest die Tabelle ‚artikel‘ und die tabelle ‚angebote‘ wie folgt:

artikel = {id [INT, PK], beschreibung [VARCHAR], preis [FLOAT]}
angebote = {id [INT, PK], artikelid [INT==>artikel.id], von [DATE], bis [DATE], preis [FLOAT]}

dann bekommst Du so immer nur den Preis vom aktuellen Angebot, falls eines existiert, oder den Standardpreis:

SELECT a.id, a.beschreibung, IFNULL(n.preis, a.preis) 
FROM artikel a
LEFT OUTER JOIN angebote n ON (n.artikelid=a.id AND (von = NOW()))
ORDER BY a.beschreibung

Falls Du dennoch eine Tabelle ‚preise‘ brauchst:

preise = {id [INT, PK], artikelid [INT==>artikel.id], preis[FLOAT]}

dann kommst Du so hinter den Preis:

SELECT a.id, a.description, IFNULL(n.preis, p.preis) FROM artikel a
INNER JOIN preise p ON p.artikelid=a.id
LEFT OUTER JOIN angebote n ON (n.artikelid=a.id AND (von = NOW()))

Schönen Gruß,
Rudy