mysql SELECT * WHERE日期+ 7天> = $今天

时间:2012-12-09 19:57:28

标签: mysql date

我只想知道是否有办法只对数据库进行一次调用即可完成此过程。 我基本上需要计算数据库中的条目,其中今天的日期早于字段'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调用而不是两个调用中完成。我的目标只是简单,清洁和懒惰: - )

谢谢!

3 个答案:

答案 0 :(得分:4)

你不应该引用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'";

答案 1 :(得分:2)

正如其他人已正确回答,您需要使用正确的报价类型。单引号用于字符串文字和日期文字。 MySQL使用back-ticks作为列名分隔符。

此外,我将单独留下date_out列,并将计算应用于今天的固定日期$。这将使MySQL更容易在date_out上使用索引。

MySQL还有一个内置函数CURDATE(),因此您可以避免插入PHP变量,因此更容易防止SQL注入。

. . .
$count_query = "SELECT COUNT(*) FROM `group` 
    WHERE `date_out` <= SUBDATE(CURDATE(), INTERVAL 7 DAY)";
. . .

答案 2 :(得分:1)

'date_out'表示值为"date_out"的字符串,该字符串不是有效日期

`date_out`是一个列名,你想使用这个

您已将'`混合(引用反引号)。 在postgres中'具有不同的含义(列名),但<{3}}中的

你也可以使用建筑:

$today = date("Y-m-d", time() - 7*24*3600); // 7 days

或者在SQL中:

WHERE date_out <= ADDDATE( NOW(), INTERVAL -7 DAYS)"