MYSQL Tabellen Eintrag nur anzeigen nach Eingabe von Start und End Datum

vodka

Mitglied
Hallo,
ich habe ein Modul in einem CMS wo man das Startzeit und Endzeit Datum eintragen kann für die Anzeige eines Eintrags. Das heisst z.B.
Startzeit: 2012-03-05
Endzeit: 2012-03-10

In diesem Fall wird der Eintrag nur in diesem Zeitraum anzeigt.

So jetzt zu meinem Problem ich will die Einträge aus diesem Modul in ein PDF Generien lassen, soweit so gut.

Dazu hab ich folgende Abfrage durchgeführt:

PHP:
SELECT 
        item.item_id,
        item.title,
		item.start_time,
		item.end_time,
		fieldval.item_id,
		fieldval.fielddef_id,
		fieldval.value,
		fielddef.fielddef_id,
		fielddef.name
        FROM 
        cms_module_mittagsmenu_item item
        INNER JOIN
        cms_module_mittagsmenu_fieldval fieldval ON fieldval.item_id = item.item_id
		INNER JOIN
		cms_module_mittagsmenu_fielddef fielddef ON fielddef.fielddef_id = fieldval.fielddef_id
WHERE
 (item.start_time IS NULL OR TIMESTAMPDIFF(DAY, CURDATE()) <= 0) 
AND 
(item.end_time IS NULL OR TIMESTAMPDIFF(DAY, item.end_time, CURDATE()) <= 0);

Dies funktioniert so auch nur hab ich gemerkert wen man jetzt bei einem Eintrag kein Start und Endzeit Datum angibt wird dieser trotzdem ausgeben und das liegt daran das es dann in die Tabelle "NULL" schreibt.

Dann dachte ich mir nehme ich das "IS NULL" weg dann solten ja nur noch diese angezeigt werden die zwischen dem Start und Endzeit sind und wen man nichts eingibt werden diese dann ja auch nicht mehr angezeigt.

Also hab ich das so umgeschrieben:

PHP:
WHERE
 (item.start_time IS TIMESTAMPDIFF(DAY, CURDATE()) <= 0) 
AND 
(item.end_time IS TIMESTAMPDIFF(DAY, item.end_time, CURDATE()) <= 0);

Ich hab das so im PHPMyAdmin getestet nur leider kommt dan folgende Fehlermeldung:

PHP:
item.start_timeTIMESTAMPDIFF(
DAY , CURDATE( ) ) <=0
)
AND (
item.end_time IS TIMESTAMPDIFF(
DAY , item.end_time, CURDATE( ) ) <=0
)
LIMIT 0 , 30;

MySQL meldet: Dokumentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TIMESTAMPDIFF( DAY , CURDATE( ) ) <= 0 ) AND ( item . end_time IS TIMESTAMPDIFF(' at line 1


Jetzt ist die Frage was ist daran Falsch ich hab einfach nur das "NULL" rausgenommen und es funktioniert nicht mehr?

Besten Dank im vorraus für eure Hilfe.
 
Zuletzt bearbeitet:
SQL:
(item.start_time IS NULL OR TIMESTAMPDIFF(DAY, CURDATE()) <= 0)
-- Kann man zur überscuiht auch so schreiben
(
  item.start_time IS NULL
OR
  TIMESTAMPDIFF(DAY, CURDATE()) <= 0
)
Der erste Teil prüft ob start_time NULL ist.
Der Zweite Teil ob die Tagesdifferenz zwieschen Jetzt und Unbekannt kleinergleich 0 ist. Dort muss sicher noch die start_time
rein.

Der erste Teil des ORs ganz entfernen und im Zweiten den Code vervollständigen
SQL:
(TIMESTAMPDIFF(DAY, CURDATE(), item.start_time) <= 0)

Mit dem Enddatum dasselbe machen.

SQL:
WHERE
  TIMESTAMPDIFF(DAY, CURDATE(), item.start_time) <= 0
  AND TIMESTAMPDIFF(DAY, item.end_time, CURDATE()) <= 0
;

Nachtrag:
Du kannst direkt mit Between prüfen
SQL:
WHERE
  CURDATE() BETWEEN item.start_time AND item.end_time
;
 
Zuletzt bearbeitet von einem Moderator:
Zurück