首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

MySQL 日期比較:查詢 N 天內的資料高效寫法

     編輯:PHP 相關知識

利用 TO_DAYS() 函數實現高效日期範圍查詢

需求:查詢「最近 5 天」、「最近 10 天」內建立的記錄。

核心原理

TO_DAYS(date) 回傳該日期距離公元 0 年的總天數 (整數)。兩個日期的天數差即為相隔天數。

高效查詢寫法

-- 最近 5 天 (含今天)
SELECT * FROM infomess
WHERE TO_DAYS(NOW()) - TO_DAYS(dateandtime) <= 5;

-- 最近 10 天
SELECT * FROM infomess
WHERE TO_DAYS(NOW()) - TO_DAYS(dateandtime) <= 10;

為何不直接用 DATE_SUB?

-- 這寫法也可行,但無法使用日期欄位索引 (MySQL 5.6+ 部分支援)
WHERE dateandtime >= DATE_SUB(NOW(), INTERVAL 5 DAY)

TO_DAYS() 寫法在舊版 MySQL 中同樣可能無法用到索引,但邏輯最直觀、相容性最好。

索引優化關鍵

  • 確保 dateandtime 欄位有索引:ALTER TABLE infomess ADD INDEX idx_date (dateandtime);
  • 避免在欄位上運算:WHERE TO_DAYS(dateandtime) ... 會導致全表掃描
  • 最佳寫法 (可用索引):
    WHERE dateandtime >= DATE_SUB(NOW(), INTERVAL 5 DAY)

PHP 中動態建構

<?php
$days = 5;
$sql = "SELECT * FROM infomess 
        WHERE dateandtime >= DATE_SUB(NOW(), INTERVAL $days DAY)";

儲存建議

  • 使用 DATETIME 或 TIMESTAMP 型別
  • 寫入時直接用 NOW() 或應用層 date('Y-m-d H:i:s')
  • 避免存字串或 Unix 時間戳 (INT),查詢需轉換且難用索引

掌握日期比較邏輯與索引原理,讓時間範圍查詢又快又準。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved