Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Pokaż wynik najbliższy aktualnej dacie i godzinie (MySQL i PHP)

Zrezygnowałbym z używania metod daty/godziny PHP i polegał na MySQL, który daje zapytanie, które wygląda jak

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 upewnia się, że otrzymuje poprawne rekordy, w przeciwnym razie część CZAS zostałaby zablokowana, tj. wynik o 03:00 od następnego dnia przed pojawieniem się, jeśli aktualny czas był o 06:00

Widzę, że używasz tam wartości znaczników czasu, więc zawsze możesz przekazać numeryczne daty PHP zamiast CURRENT_DATE. Dałoby to ostateczny skrypt

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

Radziłbym rozważyć zmianę bazy danych, jeśli to możliwe, aby przechowywać ją jako pole MySQL DATETIME, ponieważ wtedy możesz zmienić to zapytanie na po prostu WHERE datetime > NOW() , ale to zależy wyłącznie od Ciebie. Po prostu zawsze uważałem, że data MySQL jest bardziej logiczna niż PHP.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql użyć danych wiersza w tym samym zapytaniu, aby wybrać inny wiersz?

  2. Czy indeksy przyspieszają> w porównaniu z MySQL?

  3. Błąd:ER_WRONG_VALUE_COUNT_ON_ROW:liczba kolumn nie odpowiada liczbie wartości w wierszu 1

  4. SQL:jak w tym przypadku tworzone jest zapytanie w kolejności sql

  5. Mieć więcej niż jeden automatyczny przyrost na tabelę