ursus contionabundo: News auslesen

Beitrag lesen

wenn im Feld n_von der 29.12.2018 bzw. 2018-12-29 steht, dann soll die News erst ab diesem Datum online erscheinen. Wenn im Feld n_bis der 31.01.2018 bzw. 2018-31-01 steht, soll die News am 01.01.2019 nicht mehr online erscheinen.

Eine News hat also das Datum 29.12.2018 - 31.1.2018 (n_von / n_bis) soll die News nur in diesem Zeit auch online zu sehen sein.

Wenn es um ein Datum(hier das aktuelle, DATE(NOW())), geht, dann brauchen wir das BETEWEEN nicht:

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 <= DATE( NOW() )
              AND n_bis >= DATE( NOW() )
           )
           OR n_bis =  DATE( 0 )
    )
ORDER by n_id DESC;

Beachte bitte, dass die Zeitangaben zonenabhängig sind. Probiere:

SET time_zone = "+00:00";
SELECT NOW();
SET time_zone = "+01:00";
SELECT NOW();

Das ist natürlich im ostpazifischen Raum interessanter als hier.

Wäre nicht besser, wenn die Felder leer wären wenn nicht eingetragen ist?

Wie ist denn Deine Tabelle angelegt?