Tage aus mysql auslesen

fbfeix

Erfahrenes Mitglied
Hallo,

folgendes Problem: Ich hab in einer Tabelle "buchungen" unter anderem folgende Spalten: "von" und "bis" jeweils als Datum.
Wie kann ich nun alle Tage einer Buchung ausgeben lassen, einschließlich von und bis?
 
Ja so hab ichs bereits. Leider funkioniert mein Code aber nicht immer 100%ig: Könntest du da mal drüberschaun?
PHP:
$sql = "SELECT * FROM buchungen WHERE '".$von."' < Buchung_Von AND '".$bis."' > Buchung_Von AND '".$bis."' < Buchung_Bis OR
											  '".$von."' < Buchung_Von AND '".$bis."' = Buchung_Bis OR
											  '".$von."' < Buchung_Von AND '".$bis."' > Buchung_Bis OR
											  
											  '".$von."' = Buchung_Von AND '".$bis."' > Buchung_Von AND '".$bis."' < Buchung_Bis OR
											  '".$von."' = Buchung_Von AND '".$bis."' = Buchung_Bis OR
											  '".$von."' = Buchung_Von AND '".$bis."' > Buchung_Bis OR
											  
											  '".$von."' > Buchung_Von AND '".$von."' < Buchung_Bis AND '".$bis."' > Buchung_Von AND '".$bis."' < Buchung_Bis OR
											  '".$von."' > Buchung_Von AND '".$von."' < Buchung_Bis AND '".$bis."' = Buchung_Bis OR
											  '".$von."' > Buchung_Von AND '".$von."' < Buchung_Bis AND '".$bis."' > Buchung_Bis ";

Außerdem will ich ja jeden Tag des Datensatzes, nicht nur "von" und "bis". Wenn eine Buchung von 01.01.2012 bis 03.01.2012 geht will ich diese Daten:

  • 01.01.2012
  • 02.01.2012
  • 03.01.2012
 
Zuletzt bearbeitet:
Die Daten die du willst, stehe ja garnicht in der Datenbank :P

D.h. du musst erstmal normal die beiden daten auslesen und dann zum "vom-Datum" solange immer 24h dazuaddieren, bis du zum "bis-Datum" kommst. Wie du das genau löst, kommt auf den verwendeten Datumstyp an.
 
Vielen Dank!

Ist es so richtig, oder hast du das einfügen anderst gemeint?

SQL:
SELECT *
FROM
    (
        -- [Datumsliste]
        SELECT
            years.myYear,
            makedate(years.myYear, daysOfYear.day_in_year) AS mydate,
			Buchung_Von, Buchung_Bis
        FROM
            (
                -- [Tagesnummern]
                -- Zahlen von 1 bis 400
                SELECT
                    @day_in_year := @day_in_year +1 AS day_in_year
                FROM
                    (SELECT @day_in_year :=0) AS vars,
                    -- [VirtualRows1]
                    -- 400 Zeilen
                    (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) AS d1,
                    (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) AS d2,
                    (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) AS d3,
                    (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) AS d4
                    -- [/VirtualRows1]
                -- [/Tagesnummern]
            ) AS daysOfYear,
            (
                -- [Jahreszahlen]
                -- Zahlen von 'Aktuelles Jahr'-10 bis 'Aktuelles Jahr' +17
                SELECT
                    @YEAR := @YEAR+1 AS myYear
                FROM
                    (SELECT @YEAR := YEAR(NOW()) -10) AS vars,    
                    -- [VirtualRows2]
                    -- 27 Zeilem
                    (SELECT 1 UNION SELECT 2 UNION SELECT 3) AS y1,
                    (SELECT 1 UNION SELECT 2 UNION SELECT 3) AS y2,
                    (SELECT 1 UNION SELECT 2 UNION SELECT 3) AS y3                  
                    -- [/VirtualRows2]
                -- [/Jahreszahlen]
            ) AS years,
			(
				SELECT 
					Buchung_Von, Buchung_Bis
				
				FROM
					buchungen
			) AS bookings
        WHERE
            YEAR(makedate(years.myYear, daysOfYear.day_in_year)) = years.myYear
        -- [/Datumsliste]
    ) AS dates
WHERE
    myYear=2013 AND 
	mydate >= Buchung_Von AND
	mydate <= Buchung_Bis;


Wenn ich hier jetzt immer nur 1 Monat will, wie kann ich das dan verwirklichen?
 
Zuletzt bearbeitet von einem Moderator:
item: Das myYear=2013 kannst du dir schenken. hast du ja bereits durch buchung_von und buchung_to eingegrenzt

item: BETWEEN ist was schönes
SQL:
WHERE
    mydate BETWEEN Buchung_Von AND Buchung_Bis;

item:
Was meinst du mit 'nur ein Monat'?
 
Zuletzt bearbeitet von einem Moderator:
Das wiedespricht sich mit Buchung_von und Buchung_to.

Du solltest dich auf eine Variente der AUsgabe konzentrieren.

SQL:
myYear=2013 
AND MONTH(mydate) = 1
 
Zuletzt bearbeitet von einem Moderator:
Zurück