簡體   English   中英

顯示最接近當前日期和時間的結果(MySQL和PHP)

[英]Show closest result to current date & time (MySQL & PHP)

我正在嘗試進行查詢,但是經過數小時的嘗試,我似乎無法正確理解。 我想做的是從數據庫中顯示最接近當前日期和時間並且在當前日期和時間之后的一件事。

我的專欄看起來像這樣:

  date         time
1364399654     15:00
1364684400     16:00
1367272800     12:00

我的PHP看起來像這樣:

$timestamp_now = strtotime(date('d-m-Y')); //Creates a timestamp of the currect date
$time_now = date('H:i');
$sql = mysql_query('SELECT * FROM table_name ORDER BY date ASC, time ASC (WHERE date > '.$timestamp_now.') AND (time > "'.$time_now.'") LIMIT 1') or die(mysql_error());
$data = mysql_fetch_array($sql);

但是,這不起作用。 有什么建議嗎?

我會放棄使用PHP日期/時間方法,並依靠MySQL給出一個看起來像這樣的查詢

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會確保它獲取正確的記錄,否則TIME部分將被阻止,即如果當前時間為06:00,則從第二天開始的第二天的03:00出現結果

我看到您在此處使用時間戳記值,因此您仍可以始終傳遞PHP日期數字來代替CURRENT_DATE。 這將給出最終腳本

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

我建議考慮如果可能的話,將數據庫更改為僅存儲為MySQL DATETIME字段,因為這樣您就可以將查詢更改為WHERE datetime > NOW() ,但這完全取決於您。 只是一直發現MySQL日期處理比PHP更邏輯。

您應該再進行一次測試:

  • DATE(date) > CURDATE() :如果是明天或更晚
  • DATE(date) = CURDATE() AND time > TIME(NOW()) :是今天,但是稍后

完整代碼:

$sql = mysql_query('SELECT * 
                    FROM table_name 
                    WHERE DATE(date) > CURDATE()
                    OR (DATE(date) = CURDATE() AND time > TIME(NOW()))
                    ORDER BY date ASC, time ASC 
                    LIMIT 1'
                  ) or die(mysql_error());
$data = mysql_fetch_array($sql);

請注意,您在date字段中使用時間戳。 時間戳記包括日期時間,因此也許您可以使用此請求:

SELECT * 
FROM table_name 
WHERE date > NOW()
ORDER BY date ASC
LIMIT 1

我相信您需要在ORDER BY之類的結構之前使用WHERE構造SQL

SELECT * FROM table WHERE (date>$now) and (time>$now) ORDER BY date,time LIMIT 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM