2017-08-08 90 views
3

我正在制定分別爲每個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

回答

1

您可以使用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

相關問題