Mysql
 sql >> Base de données >  >> RDS >> Mysql

Afficher le résultat le plus proche de la date et de l'heure actuelles (MySQL et PHP)

J'abandonnerais les méthodes de date/heure PHP et je me fierais à MySQL pour donner une requête qui ressemble à

SELECT * FROM table_name 
WHERE date > CURRENT_DATE
OR (
    date = CURRENT_DATE
    AND 
    time > CURRENT_TIME
)
ORDER BY date ASC, time ASC LIMIT 1

L'OR s'assure qu'il obtient les enregistrements corrects, sinon la partie TIME bloquerait, c'est-à-dire qu'un résultat à 03h00 du jour suivant n'apparaîtrait pas si l'heure actuelle était à 06h00

Je vois que vous utilisez des valeurs d'horodatage afin que vous puissiez toujours transmettre la date numérique PHP à la place de CURRENT_DATE. Cela donnerait un script final de

$timestamp_now = strtotime(date('d-m-Y')); //Creates a timestamp of the currect date
$sql = mysql_query('SELECT * FROM table_name 
                    WHERE date > '.$timestamp_now.'
                    OR (
                        date = '.$timestamp_now.'
                        AND 
                        time > CURRENT_TIME
                    )
                    ORDER BY date ASC, time ASC LIMIT 1') or die(mysql_error());
$data = mysql_fetch_array($sql);

Je vous conseillerais d'envisager de changer la base de données si possible pour stocker juste comme un champ MySQL DATETIME, car alors vous pouvez changer cette requête en simplement WHERE datetime > NOW() , mais cela dépend entièrement de vous. J'ai toujours trouvé que la gestion des dates de MySQL était plus logique que PHP.