2017-08-08 1 views
3

Je travaille sur l'exigence de générer des rapports pour chaque 1, 3, 6, 12 et 24 mois respectivement où l'utilisateur sélectionne son choix par une liste déroulante. J'ai d'abord écrit une requête pour générer un rapport pendant 1 mois, ce qui a bien fonctionné. Mais je ne suis pas sûr de savoir comment rendre cette sélection dynamique en fonction de la sélection des utilisateurs.comment obtenir des rapports trimestriels, semestriels, annuels et 24 mois dans mysql?

Ma requête est la suivante:

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; 
} 

Ma Sélection menu déroulant est:

<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> 

Actuellement, la requête semble fonctionner mais je ne suis pas sûr si elle fonctionne bien ou non. S'il vous plaît des suggestions/aide? Merci.

+1

Vous voulez probablement utiliser 'BETWEEN', https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_between – Qirel

Répondre

1

Vous pouvez utiliser mysql de date_sub() function pour calculer qui enregistre la chute dans la plage de la date:

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

Sur la base de la valeur dans le menu déroulant, vous pouvez attribuer dynamiquement le nombre de mois dans la fonction DATE_SUB() à la place de la valeur 1:

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

Merci pour votre réponse, a travaillé comme un charme. –

+0

Mais je veux passer le mois en cours ce qui signifie que si c'est 3 mois puis 3 derniers mois en excluant le mois courant. –

+0

Ensuite, vous devez utiliser l'opérateur 'between ... and ...'. – Shadow