如何在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>
目前,该查询似乎是工作,但我不知道这是否工作正常与否。请提供任何建议/帮助?谢谢。
答
您可以使用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)
你可能想使用'BETWEEN',https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_between – Qirel