在新的一年中计算上个月的数据库滚动PHP SQL

时间:2016-01-03 20:13:44

标签: php mysql sql-server wordpress

我有一个自定义的wordpress插件,它运行前几个月的数据库条目报告,并且整年都有效,但是现在新的一年已经发生,它没有显示任何结果,因为它重新计算了一些几个月,然后保持2016年。

例如,我在2016年1月1日加载页面,它显示2016年12月而不是2015年的结果,当时我使用以下方法获取上个月的数据。

$today = date("Y-m-d H:i:s");   
$month_current_start = date("Y-m-")."1 0:0:0";
$currentmonth = date("m");
$lastmonthnum = $currentmonth - 1;
$last_month_start = date("Y-").$lastmonthnum."-1 0:0:0";
$last_month_end = date("Y-").$lastmonthnum."-31 0:0:0";

所以我有一个类似

的SQL
$var = $wpdb->get_var( "SELECT Count(*) FROM `table` WHERE table.timestamp BETWEEN '$last_month_start' AND '$last_month_end' AND table.amount = 1200" );

有关如何修复此查询的任何提示,以便它知道上个月是2015年吗?

我没有专业,所以我喜欢初学者风格的帮助: - )

我可以手动操作,但我希望代码能够在接下来的几个月内自动运行(因为实际的插件会计算最近四个月)。

2 个答案:

答案 0 :(得分:1)

最简单的方法是将上个月转换为时间戳,并使用它来创建数据库中的格式。基于你目前所拥有的一个例子是:

$today = date("Y-m-d H:i:s");
$month_current_start = date("Y-m-")."1 0:0:0";
$ltime = strtotime("-1 month");
$last_month_start = date("Y-m",$ltime)."-1 0:0:0";
$last_month_end = date("Y-m",$ltime)."-31 0:0:0";

这是做什么的,它是在1个月前制作一个时间戳,从行$ltime = strtotime("-1 month");开始调用它从那里开始制作该月的第一天和最后一天的格式(假设有总是31天当然^^)基于时间戳,您将用它来提供年份和月份。

PHP Sandbox使用代码示例及其输出,如果您想要了解strtotime的工作方式。

答案 1 :(得分:0)

在mysql中,您可以选择使用year_month,请参阅this以供参考。

  1. 使用您的代码获取当前年份和月份
  2. 相应地更新您的查询
  3. 或者您可以使用date_add function

    让您的SQL Server为您完成所有工作 使用您正在使用的数据库服务器

    更新您的问题,然后我可以为您编写新查询。