Comptage database pour le mois précédent à travers la nouvelle année roll over PHP SQL

J'ai eu un plugin wordpress personnalisé qui exécute un rapport pour les inputs de la database des mois précédents, et cela a fonctionné toute l'année, mais maintenant que la nouvelle année est arrivée, il ne montre aucun résultat car il count quelques mois mais le garder pour 2016.

Par exemple, je charge la page le 1er janvier 2016 et affiche les résultats pour décembre 2016 au lieu de 2015 lorsque j'utilise la méthode suivante pour get datatables du mois dernier.

$today = date("Ymd H:i:s"); $month_current_start = date("Ym-")."1 0:0:0"; $currentmonth = date("m"); $lastmonthnum = $currentmonth - 1; $last_month_start = date("Y-").$lastmonthnum."-1 0:0:0"; $last_month_end = date("Y-").$lastmonthnum."-31 0:0:0"; 

alors j'ai un SQL qui dit quelque chose comme

 $var = $wpdb->get_var( "SELECT Count(*) FROM `table` WHERE table.timestamp BETWEEN '$last_month_start' AND '$last_month_end' AND table.amount = 1200" ); 

Des conseils sur la façon de résoudre cette requête afin qu'elle sache que le mois dernier est 2015?

Je ne suis pas un professionnel, donc j'adorerais l'aide d'un débutant 🙂

Je peux le faire fonctionner manuellement mais je voudrais que le code fonctionne automatiquement pour les prochains mois (puisque le plugin actuel calcule les quatre derniers mois).

Le moyen le plus simple serait de convertir le mois dernier en horodatage, et de l'utiliser pour créer le format que vous avez dans votre database. Un exemple basé sur ce que vous avez jusqu'à présent serait:

 $today = date("Ymd H:i:s"); $month_current_start = date("Ym-")."1 0:0:0"; $ltime = strtotime("-1 month"); $last_month_start = date("Ym",$ltime)."-1 0:0:0"; $last_month_end = date("Ym",$ltime)."-31 0:0:0"; 

Qu'est-ce que cela fait, c'est qu'il fait un horodatage pour 1 mois à partir de quand il est appelé dans la ligne $ltime = strtotime("-1 month"); De là, il fait le format pour le premier jour et le dernier jour du mois (en supposant qu'il y ait toujours 31 jours de cours ^^) en fonction de l'horodatage, que vous utiliserez pour fournir l'année et le mois.

PHP Sandbox avec l'exemple de code et c'est la sortie si vous voulez jouer avec le fonctionnement de strtotime .

Dans mysql, vous avez la possibilité d'utiliser year_month, voir ceci pour reference.

  1. Obtenez l'année et le mois en cours en utilisant votre code
  2. mettre à jour votre requête en conséquence

ou vous pouvez avoir votre server sql faire tout le travail pour vous en utilisant la fonction date_add

Mettez à jour votre question avec le server db que vous utilisez, puis je peux écrire la nouvelle requête pour vous.