如何在MySQL中获取季度,半年,年度和24个月的报告?

如何在MySQL中获取季度,半年,年度和24个月的报告?

问题描述:

我正在制定分别为每个1,3,6,12和24个月生成报告的要求,其中用户通过选择下拉列表选择他的选择。首先我写了查询来生成1个月的报告,这很好。但我不确定如何根据用户选择使选择动态化。如何在MySQL中获取季度,半年,年度和24个月的报告?

我的查询低于:

switch($months){ 
    case "1": 
     $stmt = $pdo->prepare("SELECT count(*) as totalrows FROM today_analysis WHERE order_status=:order_status AND MONTH(track_date)=MONTH(CURDATE())"); 
     break; 
    case "3": 
     $stmt = $pdo->prepare("SELECT count(*) as totalrows FROM today_analysis WHERE order_status=:order_status AND CEIL(MONTH(track_date)/3)"); 
     break; 
    case "6": 
     $stmt = $pdo->prepare("SELECT count(*) as totalrows FROM today_analysis WHERE order_status=:order_status AND CEIL(MONTH(track_date)/6)"); 
     break; 
    case "12": 
     $stmt = $pdo->prepare("SELECT count(*) as totalrows FROM today_analysis WHERE order_status=:order_status AND CEIL(MONTH(track_date)/12)"); 
     break; 
    case "24": 
     $stmt = $pdo->prepare("SELECT count(*) as totalrows FROM today_analysis WHERE order_status=:order_status AND CEIL(MONTH(track_date)/24)"); 
     break; 
} 

我的选择下拉是:

<select name="month_analysis" id="month_analysis" class="month_analysis"> 
      <option value="1" <?php echo (isset($_GET['monthly']) && $_GET['monthly']=='1')?'selected':''?>>Current Month</option> 
      <option value="3" <?php echo (isset($_GET['monthly']) && $_GET['monthly']=='3')?'selected':''?> >3 Months</option> 
      <option value="6" <?php echo (isset($_GET['monthly']) && $_GET['monthly']=='6')?'selected':''?> >6 Months</option> 
      <option value="12" <?php echo (isset($_GET['monthly']) && $_GET['monthly']=='12')?'selected':''?> >12 Months</option> 
      <option value="24" <?php echo (isset($_GET['monthly']) && $_GET['monthly']=='24')?'selected':''?> >24 Months</option> 
</select> 

目前,该查询似乎是工作,但我不知道这是否工作正常与否。请提供任何建议/帮助?谢谢。

+1

你可能想使用'BETWEEN',https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_between – Qirel

您可以使用MySQL的date_sub() function来计算它记录落入所需的日期范围:

SELECT count(*) as totalrows FROM today_analysis WHERE order_status=:order_status AND track_date>=date_sub(curdate(),interval 1 month) 

根据您在下拉菜单中的值,可以动态地分配在DATE_SUB月数()函数在价值1的地方:

SELECT count(*) as totalrows FROM today_analysis WHERE order_status=:order_status AND track_date>=date_sub(curdate(),interval :monthes month) 
+0

谢谢为你的答复,工作就像一个魅力。 –

+0

但是我想跳过当前月份,这意味着如果是3个月,那么最近3个月不包括当前月份。 –

+0

然后你必须使用'...和...'操作符。 – Shadow