ursus contionabundo: News auslesen

Beitrag lesen

SELECT
    n_id, n_code, n_titel, n_titel_url, n_news, n_bild, datum,
    n_uhrzeit, n_status, n_von, n_bis                    
FROM
    news
WHERE
    n_status=1
    AND (
          n_von BETWEEN "2018-01-01" AND "2018-12-31"
       OR n_bis BETWEEN "2018-01-01" AND "2018-12-31"
       OR n_bis="0000-00-00"
    ) 
ORDER by n_id DESC;

Zeigt alle Datensätze bei denen n_von oder n_bis in diesem Jahr liegt oder das Enddatum NULL (0000-00-00) ist. Du hast Die Aufgabe an der Stelle nicht exakt spezifiert, insbesondere nicht definiert was "nutze ich die Felder n_von und n_bis" bedeuten und wie die Eingrenzung stattfinden soll.

Der Trick besteht also darin, die logischen Verknüpfungen in der WHERE-Klausel zu klammern.

Jetzt möchte ich News nur eine bestimmte Zeit anzeigen lassen, dazu nutze ich die Felder n_von und n_bis. Im SELECT müsste ich dazu doch BETWEEN nutzen oder? Ich möchte aber auch alle News angezeigt bekommen die kein von bis haben, in der Datenbank werden die mit 0000-00-00 gelistet, ich habe dazu Date genutzt, warum er da so ein komisches Datum nimmt keine Ahnung.

Das ist kein komisches, sondern das logische und genormte ISO-Datumsformat. Komisch wäre für deutsche das französische oder für Franzmänner das teutokrautische. "0000-00-00" als Flag für ein nicht erfasstes Datum (NULL) zu nutzen ist wohl eine gute Idee. Denn es ist, als Datum, ungültig.