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