如何获取mysql中的季度、半年、年度和24个月报告?
how to get quarter, half year, yearly and 24 months reports in mysql?
我正在努力满足分别每 1、3、6、12 和 24 个月生成报告的要求,其中用户 select 通过 select 下拉菜单进行选择。首先,我编写了查询以生成 1 个月的报告,效果很好。但我不确定如何根据用户 selection.
使 selection 动态化
我的查询如下:
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 下拉菜单是:
<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>
目前,查询似乎在工作,但我不确定它是否工作正常。请任何suggestions/help?谢谢
您可以使用 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)
我正在努力满足分别每 1、3、6、12 和 24 个月生成报告的要求,其中用户 select 通过 select 下拉菜单进行选择。首先,我编写了查询以生成 1 个月的报告,效果很好。但我不确定如何根据用户 selection.
使 selection 动态化我的查询如下:
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 下拉菜单是:
<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>
目前,查询似乎在工作,但我不确定它是否工作正常。请任何suggestions/help?谢谢
您可以使用 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)