sql >> Database >  >> RDS >> Mysql

Toon het resultaat dat het dichtst bij de huidige datum en tijd ligt (MySQL &PHP)

Ik zou de PHP-datum/tijd-methoden gebruiken en vertrouwen op MySQL die een zoekopdracht geeft die eruitziet als

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

De OR zorgt ervoor dat het de juiste records krijgt, anders blokkeert het TIME-gedeelte, d.w.z. een resultaat om 03:00 vanaf de volgende dag verschijnt als de huidige tijd om 06:00 was

Ik zie dat je daar tijdstempelwaarden gebruikt, dus je kunt altijd nog steeds het PHP-datumnummer invoeren in plaats van CURRENT_DATE. Dit zou een definitief script geven van

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

Ik zou adviseren te overwegen de database te wijzigen, indien mogelijk, om deze op te slaan als een MySQL DATETIME-veld, omdat je deze query dan eenvoudig kunt wijzigen in WHERE datetime > NOW() , maar dat is helemaal aan jou. Ik heb MySQL-datumafhandeling altijd logischer gevonden dan PHP's.



  1. Toon ouder-kind relatie wanneer ouder en kind in dezelfde tabel zijn opgeslagen

  2. Hoe kan ik een MySQL-resultatenset meer dan eens doorlopen met de mysql_*-functies?

  3. Tien manieren om de functionaliteit van PostgreSQL uit te breiden

  4. Hoe twee kolommen in SQL te vermenigvuldigen?