sql >> Base de Datos >  >> RDS >> Mysql

Mostrar el resultado más cercano a la fecha y hora actuales (MySQL y PHP)

Me desharía de usar los métodos de fecha/hora de PHP y confiaría en MySQL dando una consulta que parece

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

El OR se asegura de obtener los registros correctos; de lo contrario, la parte HORA se bloquearía, es decir, un resultado a las 03:00 del día siguiente no aparecería si la hora actual fuera a las 06:00

Veo que está utilizando valores de marca de tiempo allí, por lo que siempre puede pasar el valor numérico de la fecha de PHP en lugar de CURRENT_DATE. Esto daría un guión 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);

Aconsejaría considerar cambiar la base de datos si es posible para almacenar solo como un campo MySQL DATETIME, ya que entonces puede cambiar esta consulta a simplemente WHERE datetime > NOW() , pero eso depende totalmente de usted. Siempre he encontrado que el manejo de fechas de MySQL es más lógico que PHP.