J'ai un tableau du calendrier des événements et j'aimerais sélectionner des événements avec des dates égales ou supérieures à celles d'aujourd'hui. Lorsque j'utilise l'instruction SELECT suivante, elle ne récupère que les événements futurs (> NOW ()):
<?php
$db->query("SELECT * FROM events WHERE event_date >= NOW()");
?>
Comment pourrais-je choisir tous les événements d'aujourd'hui ou à venir?
Je vous remercie
Vous recherchez CURDATE()
:
$db->query("SELECT * FROM events WHERE event_date >= CURDATE()");
Ou:
$db->query("SELECT * FROM events WHERE event_date >= CURRENT_DATE()");
La raison pour laquelle cette requête:
SELECT * FROM events WHERE event_date >= NOW()
... renvoie des enregistrements du futur, car NOW () inclut l'heure ainsi que la date. Et cette partie heure indique l'heure à laquelle l'instruction [fonction ou déclencheur] a commencé à s'exécuter. Cela signifie donc que le début de la journée dans un type de données DATETIME ressemble à: 2010-06-24 00:00:00
(AAAA-MM-JJ HH: MM: SS, à la précision microseconde), ce que NOW () afficherait comme suit: 2010-06-24 14:24:31
...
Voici vos options:
SELECT * FROM events WHERE event_date >= DATE(NOW())
SELECT * FROM events WHERE event_date >= DATE(CURRENT_TIMESTAMP)
SELECT * FROM events WHERE event_date >= CURRENT_DATE()
SELECT * FROM events WHERE event_date >= CURRDATE()
Tu pourrais aussi faire
<?php
$db->query("SELECT * FROM events WHERE UNIX_TIMESTAMP(event_date) >= UNIX_TIMESTAMP(NOW())");
?>
Ce qui est plus précis que d’utiliser CURTIME () si par hasard votre temps d’utilisation ainsi que la date
Si vous vous souciez seulement de la date, pas de l'heure, utilisez CURDATE () au lieu de NOW()
.
Bien sûr, vous pouvez également utiliser le synonyme CURRENT_DATE
(avec ou sans parenthèses après celui-ci), mais la documentation que j'ai indiquée donne CURDATE
comme première orthographe ;-).
Votre problème est que now () est très précis. Donc, les dates pour aujourd'hui et pour aujourd'hui parce qu'elles ont commencé au début de la journée.
Utilisez ceci:
select * from events where datediff(event_date, now()) >= 0;
Voici la différence entre CURDATE et NOW:
mysql> select CURDATE();
+------------+
| CURDATE() |
+------------+
| 2017-03-17 |
+------------+
1 row in set (0.03 sec)
mysql> select NOW();
+---------------------+
| NOW() |
+---------------------+
| 2017-03-17 09:04:45 |
+---------------------+
1 row in set (0.00 sec)
J'utilise toujours MAINTENANT juste pour être précis