Preistabellen für Haupt- und Nebensaision

=fire=

Erfahrenes Mitglied
Hallo,

ich habe 2 Preitabellen in der preis Tabelle, pro Preistabelle eine Spalte. Nun sind diese immer für einen bestimmten Zeitraum gültig bspw:

ID | Tag1 | Tag2 | Tag3 | Tag4 | .... | von | bis
1 | 10 | 20 | 30 | 40 | 100| 0000-04-01 | 0000-10-31
2 | 20 | 30 | 40 | 50 | 200| 0000-11-01 | 0000-03-31

Das Datum ist 0000 da es ja jedes Jahr gültig ist. Leider funktioniert nun die Abfrage nicht so wie ich mir das vorstelle

SQL:
SELECT * FROM preis WHERE von<='".date("0000-m-d", $buchungvon)."' AND bis>='".date("0000-m-d", $buchungbis)."' LIMIT 1
 
Hi

Man sollte nicht versuchen, auf Krampf alle Themen über die DB zu lösen. Es gibt auch Dinge, die die Presentation übernehmen muss / sollte. Dies hier gehört dazu!
Entweder, du verwendest DateTime in der DB, dann musst du dich auch mit den Gegebenheiten des Datentyps abfinden oder du speicherst das Datum als String in einem ungültigen Format und verzichtest auf die Funktionalitäten des DBMS
 
Also wenn du es über die Datenbank lösen willst und bestimmen kannst wie die Daten eingetragen werden, dann mach es einfach so das beim "VON" Datum der "01.01.1000" und beim "BIS" Datum der "31.12.9999" eingetragen wird.
 
Nee so geht das glaube ich nicht..

ich habe ja zwei zeilen (Preistabellen) eine geht von 01.04 bis 31.10 und eine von 01.11 bis 31.03.. Nun soll wenn der Kunde z.B. 27.08 wählt die richtige Tabelle geladen werden..

Ich habe das datum als varchar gespeichert also 0401 & 1031. Und dann suche ich über sql eine die
eine kleineren von und größeren bis wert hat..

geht aber nur wenn die innerhalb des Jahres bleiben.. das ist das Problem..
SQL:
SELECT * FROM preis WHERE von<='".date("md", $buchungvon)."' AND bis>='".date("md", $buchungvon)."' LIMIT 1
 
Gehen wir das Problem mal anders an. Erkläre uns mal was die einzelnen Felder in der Tabelle bedeuten, vor allem Tag 1, Tag 2, ...
 
So nochmal was anderes. Mit dieser Abfrage kannst du die Jahreszahlen mit "0000" in der Datenbank stehen lassen. Wobei es sicher besser wäre die Jahreszahlen wie oben geschrieben anzupassen.

SQL:
SELECT ID,
CAST(CONCAT(IF(YEAR(von)= '0000', '1000', YEAR(von)), "-", MONTH(von), "-", DAY(von)) AS DATE) AS von
,
CAST(CONCAT(IF(YEAR(bis)= '0000', '9999', YEAR(bis)), "-", MONTH(bis), "-", DAY(bis)) AS DATE) AS bis
FROM preis
HAVING '2011-08-28' BETWEEN von AND bis
 
Was macht die Abfrage denn genau? Funktioniert so leider noch nicht, er zeigt keine Zeile an..

ich brauche die Jahre ja nicht, momentan steht das "Datum" als varchar in der Datenbank 0828 das wäre heute..

Die Spalten tag1 tag2 sind unrelevant..
 
Zurück