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.