Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Zeige das Ergebnis, das dem aktuellen Datum und der aktuellen Uhrzeit am nächsten kommt (MySQL &PHP)

Ich würde die Verwendung der PHP-Methoden für Datum und Uhrzeit aufgeben und mich darauf verlassen, dass MySQL eine Abfrage gibt, die wie folgt aussieht

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

Das OR stellt sicher, dass es die richtigen Aufzeichnungen erhält, sonst würde der TIME-Teil blockieren, d. h. ein Ergebnis um 03:00 Uhr des nächsten Tages wird nicht angezeigt, wenn die aktuelle Zeit 06:00 Uhr wäre

Wie ich sehe, verwenden Sie dort Zeitstempelwerte, sodass Sie immer noch die PHP-Datumszahl anstelle von CURRENT_DATE übergeben können. Dies würde ein endgültiges Skript von

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

Ich würde empfehlen, die Datenbank zu ändern, wenn möglich, um sie nur als MySQL-DATETIME-Feld zu speichern, da Sie diese Abfrage dann einfach in WHERE datetime > NOW() ändern können , aber das liegt ganz bei Ihnen. Ich fand nur, dass MySQL immer logischer mit Daten umgeht als PHPs.