簡體   English   中英

mysql SELECT * WHERE date + 7 days> = $ today

[英]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.

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