【问题标题】:compare current year and month to database entered y/m within sql query将当前年份和月份与在 sql 查询中输入 y/m 的数据库进行比较
【发布时间】:2012-12-21 08:52:51
【问题描述】:

无法编写完整的函数来将当前月份和年份与我的数据库 m/y 进行比较。数据库中的日期来自 now() 函数。我想根据这个比较来总结成本。比如:

$currentDate = date("Y-m");
$query = mysql_query ("SELECT SUM(cost) FROM memberorders WHERE 
         memberNumber=$memNum AND 
        (SELECT DATE_FORMAT(orderDate, '%Y-%m'))=$currentDate");

但这不起作用。然后我需要一个函数来总结一下。

$test1 = mysql_fetch_array($query);
$total = $test1[0];

这对遍历数据库并总结有用吗?

【问题讨论】:

  • 解释$currentDate的格式。
  • 无需使用内部选择查询。您可以直接比较日期。您使用的日期格式是什么?
  • 我更新了帖子。当前日期正确显示了今天的年份和月份。
  • @Saharsh 我需要一个子查询,因为我不想比较日子。仅在与我们现在所在的月份相同的情况下,才对成本列求和,如果这有意义的话
  • 您可以使用相同的日期格式功能,无需内部查询。检查我的答案并尝试一下

标签: php mysql date select


【解决方案1】:

不要这样做,如果要使用索引,请不要将任何函数(如 DATE_FORMAT() 函数)应用于列(如 OrderDate 列)。如果您可以在应用程序 (PHP) 代码中创建固定的月份开始,请尝试此操作:

SELECT SUM(cost) 
FROM memberorders 
WHERE memberNumber = $memNum 
  AND orderDate >= '2013-01-01'      -- first day of this month
  AND orderDate < '2013-02-01' ;     -- first day of next month

或者如果你喜欢在 MySQL 中处理它:

SELECT SUM(cost) 
FROM memberorders 
WHERE memberNumber = $memNum 
  AND orderDate >= LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 1 MONTH 
  AND orderDate < LAST_DAY(NOW()) + INTERVAL 1 DAY ;

【讨论】:

  • 感谢您的建议,但我不知道是否可以使用。我想在会员页面上显示会员的费用总和。所以当新的一个月开始时,它需要重新设置。它需要逐月进行,因此没有结束日期
  • 这就是它的作用。它汇总了本月(2013 年 1 月)的所有费用。第一个版本需要一些 PHP 代码。第二个版本无需任何额外代码即可工作。
  • 第二个版本每个月都会这样做?
  • 当前月份。 NOW() 将返回当前日期时间,其余的 LAST_DAY() 和其他东西将计算所需的开始和结束(本月的第一天和下个月的第一天)。还有一个小错误,现在已经更正了。
  • 该死...我尝试了代码,将其更改为仅从今天日期的一行中检索一个值,然后我收到一个 mysql_fetch_assoc 错误...需要一个参数。 $query = ("SELECT * FROM memberorders WHERE orderDate >= (LAST_DAY(NOW()) - INTERVAL 1 MONTH + INTERVAL 1 DAY) AND orderDate
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多