sql >> Databasteknik >  >> RDS >> Mysql

Visa det resultat som ligger närmast aktuellt datum och tid (MySQL &PHP)

Jag skulle avstå från att använda PHP-datum/tid-metoderna och lita på att MySQL ger en fråga som ser ut som

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

OR ser till att den får korrekta poster, annars skulle TIME-delen blockera, dvs. ett resultat kl. 03:00 från nästa dag från att visas om den aktuella tiden var kl. 06:00

Jag ser att du använder tidsstämpelvärden där så att du alltid kan skicka in PHP-datumnumeriken istället för CURRENT_DATE. Detta skulle ge ett sista manus av

$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);

Jag skulle råda dig att överväga att ändra databasen om möjligt så att den bara lagras som ett MySQL DATETIME-fält, eftersom du då kan ändra denna fråga till att helt enkelt WHERE datetime > NOW() , men det är helt upp till dig. Har bara alltid tyckt att MySQL-datumhantering är mer logisk än PHP.



  1. ActiveRecord-fel:SAVEPOINT active_record_1 existerar inte

  2. Varför får jag ett syntaxfel när jag använder CAST i MySQL?

  3. anpassad id primärnyckel kan inte hämtas efter Laravel save()-metoden

  4. Halloweenproblemet – del 4