Vandaag wil ik een bericht plaatsen in de database met datum van weergeven en datum verbergen. Stel vandaag 10 december plaats ik een bericht met datum 15 december weergeven en 20 december verbergen. Hoe kan ik dat met php dat weergeven?

SELECT * FROM berichten
WHERE NOW() BETWEEN startdatumkolom AND einddatumkolom
Je kunt twee kolommen van het type DATE voor datums toevoegen aan de databasetabel, voor MySQL bijvoorbeeld:

CREATE TABLE IF NOT EXISTS messages (
  message_id  INT(10) UNSIGNED  NOT NULL  AUTO_INCREMENT,
  message     TEXT              NOT NULL,
  publish     DATE              NULL  DEFAULT NULL,
  unpublish   DATE              NULL  DEFAULT NULL,
  PRIMARY KEY pk_message_id (message_id),
  INDEX ix_publish (publish DESC)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8  COLLATE=utf8_general_ci

Vervolgens voer je een query uit waarbij de datum publish in het verleden ligt (voor berichten die al zijn gepubliceerd) en de datum unpublish in de toekomst ligt (voor berichten die nog niet verborgen hoeven worden):

  SELECT message
    FROM messages
   WHERE publish < NOW()
     AND (unpublish IS NULL OR unpublish > NOW())
ORDER BY publish DESC

Heeft een bericht geen unpublish-datum, dan ga ik er in dit voorbeeld van uit dat het bericht nooit hoeft te worden verborgen en wordt het eveneens weergegeven. Dat is dus een net iets andere benadering dan met de BETWEEN in de oplossing van Ivo.

Reageren