2010-11-11 9 views
0

J'ai essentiellement un calendrier simple que j'ai mis en place. A partir de maintenant, il montre les événements "futurs". Et puis l'événement expire ce jour-là ... J'aimerais trouver une déclaration WHERE que je peux utiliser pour que cet "événement" reste pendant 1 jour après le "post_date"Mysql, instruction requête WHERE WHERE, le jeu d'enregistrements expire le +1 jour de la date de publication?

(donc si je l'affiche comme Nov L'événement afficherait: Nom de l'événement - 15 novembre

Et resterait actif jusqu'au +1 jour de post_date? (16 novembre serait la date à expiration)

Voici ce que j'ai jusqu'à présent:

WHERE DATE(FROM_UNIXTIME(`date`)) >= DATE(NOW()) 

Merci à l'avance ...

+0

Quel est le type de données de la colonne 'date' et/ou' post_date'? –

Répondre

2
WHERE post_date > DATE(NOW())-INTERVAL 1 DAY 

et si vous voulez vraiment garder votre post_date s dans UNIX: horodatages

WHERE FROM_UNIXTIME(post_date) > DATE(NOW())-INTERVAL 1 DAY 
+0

Super! Ils travaillent tous deux très bien! Y a-t-il une raison que je devrais utiliser: – eberswine

+0

WHERE FROM_UNIXTIME (post_date) + INTERVAL 1 DAY (DATE (NOW()) – eberswine

+0

Veille à ce que l'expression de ce côté de l'opérateur qui contient le champ ne soit pas trop compliquée, sinon aucun index est utilisé. J'ai édité mon exemple pour le rendre clair. (Bien qu'un simple "+" soit optimisé). – AndreKR

0

Modifier votre déclaration où:

WHERE DATE(FROM_UNIXTIME(`date`)) + INTERVAL 1 DAY >= CURDATE(); 

C'est également une bonne idée d'utiliser des dates SQL réelles au lieu des horodatages UNIX. Il y a des fonctions pour faire des calculs sur eux.

+0

Cela fonctionne parfaitement aussi !! Y a-t-il une grande différence entre les deux réponses? – eberswine

+0

Pas une grosse différence. Le mien le compare en fonction de la date et ignore l'heure. La version de @ AndreKR utilise explicitement la partie date de 'MAINTENANT' (j'ai utilisé CURDATE qui renvoie uniquement la date). La partie heure de FROM_UNIXTIMESTAMP est effectivement ignorée de toute façon. – Cfreak

+0

O WH FROM_UNIXTIME (post_date) + INTERVAL 1 DAY> = CURDATE() qui est une combinaison des deux, serait probablement si légèrement plus rapide. – Cfreak