Preistabellen für Haupt- und Nebensaision

item: Das ganze CONCAT() und CAST-Zeugs ist hier völlig übertrieben. Um von deinem Datum '0000-04-01' auf das Datum '2011-04-01' zu kommen reicht ein einfacher DATE_ADD() um die Jahreszahl zur Zahl 0 dazuzurechnen
SQL:
-- zu umständlich:
 CAST(CONCAT({$year},  '-', MONTH(start), '-', DAY(start)) AS DATE) AS start,
-- Vereinfachte Lösung
DATE_ADD(start, INTERVAL {$year} YEAR) AS start

item: Mein Ansatz.
Zuserst eine Untertabelle die die Jahre für von und bis berchnet die für das ausgewählte Jahr (im Beispiel 2011) in frage kommen
von_jahr | bis_jahr
2011 | 2011
2011 | 2012


Diese dann mit den Daten kombinieren und jene ausfiltern, dies nicht braucht.

SQL:
SELECT
	id,
	DATE_ADD(von, INTERVAL von_jahr YEAR) AS von_new,
	DATE_ADD(bis, INTERVAL bis_jahr YEAR) AS bis_new
FROM
	test123,
	--Zeilen mit den von bis Jahren. Hier das 2011 durch das gewünschte Jahr ersetzen
	(SELECT @jahr:=2011 AS von_jahr, @jahr AS bis_jahr 
	UNION ALL SELECT @jahr AS von_jahr, @jahr+1 AS bis_jahr ) AS temp_rows
WHERE
	bis_jahr = von_jahr
	OR bis < von
 
Zuletzt bearbeitet von einem Moderator:
Das kannst du nun darüber setzen
SQL:
SELECT
    *
FROM
    (
        -- TODO: das obere SQL hierr einkopieren
    ) AS mydata
WHERE 
    parking_id='{$parking_id}'
    AND FROM_UNIXTIME({$flight_out}) BETWEEN (von_new AND bis_new)
LIMIT 1
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

es gibt nun genau das selbe Problem wie vorher auch... In der Datenbak gibt es z.B. 2012-04-01 - 2012-11-30 und 2012-12-01 - 2012-03-31

Das stimmt ja, nur was ist wenn ich als Datum den 01.02.2012 wähle, dann müsste eigentlich der Tarif von 2012-12-01 - 2012-03-31 gelten?!
 
Irgendwie seh ich bei deinen Daten nicht durch
Ausgewähltes Datum: 1. Feb. 2012
Tarif: von: 1. Dez 2012 bis: 31.März 2012?

Dann ist dein Von-Bis falsch aufgebaut.
 
Hallo,

die grundlegende Tabelle für die Saisonpreise sollte so aussehen:

startdate enddate

01.04.1000 30.11.1000
01.12.1000 31.03.1001

Das Jahr 1000 ist willkürlich gewählt, weil ja nur 'Dummy'. Wichtig: für den Jahresübergreifenden Zeitraum MUSS das Jahr für das Enddatum um eins erhöht sein.

Somit lässt sich dann die Abfrage wie folgt gestalten:

Code:
    SELECT ID,startdate, enddate 
    FROM tabelle1, (SELECT @jahrdiff:=YEAR(@datum_von)-1000) as diff
    WHERE
            @datum_von >= DATE_ADD(startdate, INTERVAL @jahrdiff YEAR)
            AND DATE_SUB(@datum_bis, INTERVAL @jahrdiff YEAR) < enddate


Der Code ist jahresmässig flexibel, d.h. es wird stets die korrekte Jahresdifferenz anhand des datum_von errechnet.
 
Zuletzt bearbeitet:
Zurück