[英]mysql SELECT * WHERE date + 7 days >= $today
我只想知道是否有一種方法可以只對數據庫進行一次調用。 我基本上需要對今天的日期早於字段“ date_out” + 7天的數據庫進行計數。 我在想類似的東西:
$today = date("Y-m-d"); //this is the format of date_out in my db!
$count_query = "SELECT count(*) FROM `group` WHERE ADDDATE('date_out', INTERVAL 7 DAY) <= $today ";
$count_result = mysql_query($count_query) or trigger_error("SQL", E_USER_ERROR);
$query_data = mysql_fetch_row($count_result);
$number_ty = $query_data[0];
if ($number_ty >= 1) {
// do something
}
此代碼的$ number_ty始終為0。 如前所述,這個問題的目標是知道計數是否可以僅通過一個mysql調用而不是兩個mysql調用來完成。 我的目標只是簡單,整潔和懶惰:-)
謝謝!
您不應該引用date_out
:
ADDDATE(date_out, INTERVAL 7 DAY)
您應該引用$today
:
<= '$today'
這是一個更正的查詢。 不過,我建議您研究一下Mysqli或PDO。 您正在使用的庫已棄用。
$count_query = "SELECT count(*) FROM `group` WHERE ADDDATE(date_out, INTERVAL 7 DAYS) <= '$today'";
當其他人回答正確時,您需要使用正確的引號類型。 單引號用於字符串文字和日期文字。 MySQL使用反引號作為列名定界符。
另外,我將單獨保留date_out
列,並將計算應用於固定日期$ today。 這將使MySQL在date_out
上使用索引更加容易。
MySQL還具有內置函數CURDATE()
因此您可以避免插入PHP變量,因此可以更輕松地防止SQL注入。
. . .
$count_query = "SELECT COUNT(*) FROM `group`
WHERE `date_out` <= SUBDATE(CURDATE(), INTERVAL 7 DAY)";
. . .
'date_out'
表示值為"date_out"
字符串,該字符串無效
`date_out`
是一列名稱,您想使用此名稱
您已經將'
與`
混合在一起(引號帶有反引號)。 在postgres中 在MySQL中,它是字符串轉義字符 。 '
具有不同的含義(列名),但
您也可以使用構造:
$today = date("Y-m-d", time() - 7*24*3600); // 7 days
或在SQL中:
WHERE date_out <= ADDDATE( NOW(), INTERVAL -7 DAYS)"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.