Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Mostrar o resultado mais próximo da data e hora atuais (MySQL e PHP)


Eu abandonaria o uso dos métodos de data/hora do PHP e confiaria no MySQL fornecendo uma consulta que se parece com
SELECT * FROM table_name 
WHERE date > CURRENT_DATE
OR (
    date = CURRENT_DATE
    AND 
    time > CURRENT_TIME
)
ORDER BY date ASC, time ASC LIMIT 1

O OR garante que ele obtenha os registros corretos, caso contrário a parte TIME bloquearia, ou seja, um resultado às 03:00 do dia seguinte apareça se a hora atual for às 06:00

Vejo que você está usando valores de timestamp lá para que você sempre possa passar a data numérica do PHP no lugar de CURRENT_DATE. Isso daria um roteiro 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);

Aconselho a considerar alterar o banco de dados, se possível, para armazenar apenas como um campo MySQL DATETIME, pois você pode alterar essa consulta para simplesmente WHERE datetime > NOW() , mas isso depende inteiramente de você. Sempre achei o manuseio de dados do MySQL mais lógico que o PHPs.