Cette fois, je vais vous présenter l'optimisation des statistiques de données de synchronisation PHP+MySQL. Quelles sont les précautions pour l'optimisation des statistiques de données de synchronisation PHP+MySQL ? Voici des cas réels, jetons un coup d'œil.
Dans les projets Internet, l'analyse des données du projet est essentielle. Habituellement, la tendance des modifications totales des données quotidiennes sur une certaine période de temps est calculée pour ajuster la stratégie marketing. Regardons les cas suivants.
Cas
Il existe généralement un formulaire de commande dans la plateforme de commerce électronique pour enregistrer toutes les informations de commande. Nous devons maintenant compter le nombre de commandes et le montant des ventes par jour au cours d'un mois donné pour dessiner le graphique statistique suivant pour l'analyse des données.
La structure des données du tableau de commande est la suivante :
order_id | order_sn | total_price | enterdate |
---|---|---|---|
25396 | A4E610E250C2D378D7EC94179E14617F | 2306.00 | 01/04/2017 17:23:26 |
25397 | EAD217C0533455EECDDE39659ABCDAE9 | 17.90 | 01/04/2017 22:15:18 |
25398 | 032E6941DAD44F29651B53C41F6B48A0 | 163.03 | 02/04/2017 07:24:36 |
À l'heure actuelle, comment interroger le nombre de commandes passées chaque jour d'un certain mois et le montant total ?
Méthode générale
La première et la plus simple façon de penser est d'utiliser la fonction php <a href="http://www.php.cn/wiki/1230.html" target="_blank">cal_days_in_month</a>()
pour obtenir le nombre de jours dans le mois, puis construisez une liste de tous les jours du tableau mois, puis interrogez le total quotidien dans une boucle pour construire un nouveau tableau.
Le code est le suivant :
$month = '04'; $year = '2017'; $max_day = cal_days_in_month(CAL_GREGORIAN, $month, $year); //当月最后一天 //构造每天的数组 $days_arr = array(); for($i=1;$i<=$max_day;$i++){ array_push($days_arr, $i); } $return = array(); //查询 foreach ($days_arr as $val){ $min = $year.'-'.$month.'-'.$val.' 00:00:00'; $max = $year.'-'.$month.'-'.$val.' 23:59:59'; $sql = "select count(*) as total_num,sum(`total_price`) as amount from `orders` where `enterdate` >= {$min} and `enterdate` <= {$max}"; $return[] = mysqli_query($sql); } return $return;
Ce SQL est simple, mais il nécessite 30 requêtes à chaque fois, ce qui ralentit sérieusement le temps de réponse.
Optimisation
Comment utiliser un sql pour interroger directement la quantité totale de chaque journée ?
À ce stade, vous devez utiliser la fonction date_format
de mysql pour connaître d'abord toutes les commandes du mois en cours dans la sous-requête, convertir la date d'entrée en jours à l'aide de la fonction date_format, puis regrouper les statistiques de jour group by
. Le code est le suivant :
$month = '04'; $year = '2017'; $max_day = cal_days_in_month(CAL_GREGORIAN, $month, $year); //当月最后一天 $min = $year.'-'.$month.'-01 00:00:00'; $max = $year.'-'.$month.'-'.$max_day.' 23:59:59'; $sql = "select t.enterdate,count(*) as total_num,sum(t.total_price) as amount (select date_format(enterdate,'%e') as enterdate,total_price from orders where enterdate between {$min} and {$max}) t group by t.enterdate order by t.enterdate"; $return = mysqli_query($sql);
Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de PHP !
Lecture recommandée :
Explication détaillée du déploiement de mysqld_multi sur une seule machine
Comment interroger différentes bases de données avec une seule instruction SQL
Comment utiliser React pour développer des bibliothèques de composants
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!