我只想知道是否有办法只对数据库进行一次调用即可完成此过程。 我基本上需要计算数据库中的条目,其中今天的日期早于字段'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
}
使用此代码,谢谢!
答案 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)"