1

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

谢谢!

4

3 回答 3

5

你不应该引用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'";
于 2012-12-09T19:59:49.067 回答
2

正如其他人正确回答的那样,您需要使用正确的引号类型。单引号用于字符串文字和日期文字。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)";
. . .
于 2012-12-09T20:09:12.413 回答
1

'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)"
于 2012-12-09T20:00:01.153 回答