Requete SQL >120secondes

Signaler
Messages postés
25
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
23 mars 2012
-
Messages postés
25
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
23 mars 2012
-
Bonjour,

Bonjour,
J'ai une table MySQL qui fait 510 000 lignes avec 19 champs qui représente des log de chaques jours sur une année ttes les minutes. Donc pr chaque jour j'ai env 1440 entrées
pour chaque jour de chacun des mois je cherche le MIN & MAX pour 4 Champs puis je fait un graph pour chaque mois de l'année. (graph avec la lib jpgraph).

Le pb c'est que la requete fait plus de 120 secondes, comment optimser le truc:
La table est organisée de cette façon:
Date hchc hchp
01/01/10 12345678 123456789

le code: ($annee est du style 2008)


function sql_affiche_graph_annuel ($base_name,$annee)
{
$url_sql= "localhost";
$table_sql="base";
$log="root";
$pass="";
$MONTHS = array("Janvier", "Février", "Mars", "Avril", "Mai",
              "Juin", "Juillet", "Août", "Septembre", "Octobre",
"Novembre", "Décembre");
$dimx=300;
$dimy=200;
$ind_hc=array(12,32);				/
$ind_hp=array(12,32);

$A=substr($annee,2,2);

$db = mysql_connect($url_sql, $log, $pass); // on se connecte à MySQL
mysql_select_db($table_sql,$db); 	// on sélectionne la base 

for ($num_mois=1;$num_mois<13;$num_mois++)	
{
if (strlen($num_mois)==1)//  Rajoute un Zero au chiffre des unités pr garder la meme lg de la string
{$num_mois_new="0".$num_mois;}
else
{$num_mois_new=$num_mois;}

for ($num_du_jour=1;$num_du_jour<32;$num_du_jour++)
{
if (strlen($num_du_jour)==1)//  Rajoute un Zero au chiffre des unités pr garder la meme lg de la string
{$num_jour_new="0".$num_du_jour;}						
else
{$num_jour_new=$num_du_jour;}

$jour_new=($num_jour_new.'/'.$num_mois_new.'/'.$A);
echo ' jour new : '.$jour_new.' 
';
// Extraction des valeurs MIN et MAX de HCHC et de HCHP
$sql  = "SELECT MIN(hchc) as min_hc2, MAX(hchc) as max_hc2,MIN(hchp) as min_hp2, MAX(hchp) as max_hp2 FROM $base_name WHERE date='$jour_new'"; 
$result=mysql_query($sql) or die(mysql_error());
$min_hc=mysql_result($result,0,'min_hc2');
$max_hc=mysql_result($result,0,'max_hc2');
$min_hp=mysql_result($result,0,'min_hp2');
$max_hp=mysql_result($result,0,'max_hp2');

$ind_hc[$num_mois_new][$num_du_jour]=$max_hc-$min_hc;
$ind_hp[$num_mois_new][$num_du_jour]=$max_hp-$min_hp;
}	
}
mysql_close($db); 



Il y a t il une façon nettement plus performante pour extraire ces infos?

Merci,

15 réponses

Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
Alors il y a plusieurs façons:
1. changer le type de table. En effet, à titre d'exemple HEAP est plus rapide de MyISAM pour certaines requetes
2. calculer et mettre dans une table les Min et Max qui ne changeront plus jamais. ainsi, plus de recalcul
3. comme tes données sont ordonnées chronologiquement, peut-être qu'un traitement sur des fichiers formatés pourrait être un alternative (via grep ou awk).

Dans l'absolu, ne mettre en table que ce qui peut influencer la donnée à traiter et 'archiver' le reste.
S.
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
28
Salut,

Solution

Faire 1 requete qui ramene 360 lignes à la place de 360 qui ramene 1 ligne

Bon dev
Messages postés
25
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
23 mars 2012

hi,

je n'arrive pas trop a saisir, faire 1 requete qui ramene à 360 ligne reviens à extraire les jours... mais je ne vois pas trop quelle requete faire, peux-tu préciser stp.

thx,
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
28
Ca

SELECT MIN(hchc) as min_hc2, MAX(hchc) as max_hc2,MIN(hchp) as min_hp2, MAX(hchp) as max_hp2 ,`date` as date_1  FROM $base_name GROUP BY `date`


Et apres tu auras un code du genre

$query = "SELECT ................";
$result = mysql_query($query) or die(mysql_error());


while($row = mysql_fetch_array($result)){
     $day = day($row['date_1']);
     $month = month($row['date_1'];
     $ind_hc[month($month['date_1'])][$day]=$row['max_hc2']-$row['min_hc2'];
     $ind_hp[month($month][$day]=$row['max_hp2']-$row['min_hp2'];
}

mysql_close($db);


C'est pas testé mais ca donne une idée de ce qui peut être fait
Messages postés
25
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
23 mars 2012

Wahou...

Sans vouloir abuser, j'ai pas tout compris à ton exemple.
Je viens de mettre les pieds ds le sql depuis qq jours seulement.
Peux tu me commenter un peu tout cela afin que j'essaye de comprendre la philosophie de l'approche stp.
(en autre day(...), month(...) ..)

sry
mais thx qd meme.
;)
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
28
Ok

Je ne connaissais pas ton niveau en PHP,
si la requete est ok tu auras normalement comme resultat


min_hc2, max_hc2, min_hp2, max_hp2 , date_1
1 2 6 10 01/01/2010
2 5 7 15 02/01/2010
.....


while($row = mysql_fetch_array($result)){
    //on recupere le jour et le mois pour faire les indices du tableau
     $day = date('d',$row['date_1']);
     $month = date('m',$row['date_1'];
     $ind_hc[$month][$day]]=$row['max_hc2']-$row['min_hc2'];
     $ind_hp[$month][$day]=$row['max_hp2']-$row['min_hp2'];
}



Je ne connaissais pas les fonctions PHP par coeur.
et j'ai pas peu dérapé dans l'écriture de la boucle
je pense que ca doit être mieux.

Essaies de faire fonctionner la requete dans un premier temps et apres le code

Bon dev
Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
Ah oui, si c'est ça ton niveau de PHP, laisse tomber mes solutions.. Un chouillat plus complexe à mettre en oeuvre.. LOL !!
Messages postés
25
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
23 mars 2012

Ben woui mais désoél, j'apprends

quoi qu'il en soit le code avance merci qd meme.
Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
Après tu nous fera part de l'amélioration des performances. c'est toujours sympa de voir l'amélioration pour un m^me résultat.
S.
Messages postés
25
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
23 mars 2012

ben pour le moment, et sauf boulette, de mon côté, et avec un peu de bricolage de newbee. je suis passé d'un timeout 120s à une solution (boîteuse pr le moment) de 1s07 avec graph issus de la nvelle lib de jpgraph.

Dès que le bouzin sera moins boîteux je poserai le code ainsi bricolé afin de faire sourire les "pro" HeHe.
(ss ouvert à toutes remark et autres)

Ds tous les cas faudra que qq1 m'explique le principe des requetes sql (celle que j'avais et celle proposé) car je ne comprend pas le principe réel de chacune et comment on peux perdre (ou gagner) autant de temps juste en posant la "good question".

thx,
Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
Super comme progression..
Là est tout le 'génie'..savoir LOL..
Savoir ce qui est gourmand de ce qui ne l'est pas.
Réellement, c'est plutot en fonction de l'expérience. Déja à mon sens mettre des logs dans une table sachant que ceux-ci ne risquent pas de bouger ce n'est pas très judicieux si tu sais déja quels sont les statistiques que tu souhaites avoir..
Tout dépend de ton besoin, il n'y a pas de recette magique.
S.
Messages postés
25
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
23 mars 2012

Bon me revoilà,

un petit soucis, selon les logs actualisés dans la table SQL, il se peux que des logs pour un ou plusieurs jour ne soient pas présent(pb internet, mois à 28, 30 ou 31 jours.)

Le Pb est que pour passer les infos dans la partie graphique (jpgraph) que j'appel 12 fois, je modifie le tableau actuel:
$ind_hc[$month][$day] et $ind_hp[$month][$day] en $ind_hc2[$day]= $ind_hc[$month][$day] et $ind_hp2[$day]=$ind_hp[$month][$day].

et donc pour ces jours-là j'ai cette erreur:
Notice: Undefined offset:

et j'ai aussi pour tou le mois de Janvier (les logs sont bien présents pourtant):
Warning: Cannot use a scalar value as an array in $ind_hc[$month][$day]=$row['max_hc2']-$row['min_hc2'];

Voilà le code:
$MONTHS = array("Janvier", "Février", "Mars", "Avril", "Mai",
              "Juin", "Juillet", "Août", "Septembre", "Octobre",
"Novembre", "Décembre");
$dimx=600;
$dimy=400;
$ind_hc=array(13,32);				// 28 ????   SUELEMENT ??
$ind_hp=array(13,32);
$ind_hc2=array(32);
$ind_hp2=array(32);

$A=substr($annee,2,2);

$db = mysql_connect($url_sql, $log, $pass); 												// on se connecte à MySQL
mysql_select_db($table_sql,$db); 															// on sélectionne la base 
// Extraction des valeurs MIN et MAX de HCHC et de HCHP
$sql = "SELECT MIN(hchc) as min_hc2, MAX(hchc) as max_hc2,MIN(hchp) as min_hp2, MAX(hchp) as max_hp2 ,`date` as date_1  FROM $base_name GROUP BY `date`";
$result=mysql_query($sql) or die(mysql_error());

while($row = mysql_fetch_array($result))
{
//on recupere le jour et le mois pour faire les indices du tableau
//				echo ' date : '.$row['date_1'].'    ';
$day = date('j', strtotime($row['date_1'])); 
$month=  date('n', strtotime($row['date_1'])); 
//				echo ' day : '.$day.'    ';
//				echo 'month : '.$month.'
';
$ind_hc[$month][$day] =$row['max_hc2']-$row['min_hc2'];
$ind_hp[$month][$day]= $row['max_hp2']-$row['min_hp2'];
}

mysql_close($db); 																			// on ferme la connexion à mysql 

for ($month=1;$month<13;$month++)
{
for ($day=1;$day<32;$day++)
{
//			echo ' Day : '.$day.'       Month : '.$month.'      ';
//			echo 'Tab hc: '.$ind_hc[$month][$day].'Tab hp: '.$ind_hp[$month][$day].'
';
if ($ind_hc[$month][$day] == "" || $ind_hp[$month][$day]=="")		// des fois il n'y a pas de log pr ce jour ou le jour n'existe pas selon le mois
{
echo ' AAARGG : 
';
$ind_hc2[$day] =0;
$ind_hp2[$day]=0;
}
else
{
$ind_hc2[$day]=$ind_hc[$month][$day];
$ind_hp2[$day]=$ind_hp[$month][$day];
}

}

$graph5 = new Graph($dimx,$dimy); 																		// Creation du graphique	
$graph5->SetScale("linlin",0,60000,1,31);
$graph5->title->Set("Index Menusel de ".$MONTHS[$month-1]." 20".$A );

$graph6 = new Graph($dimx,$dimy); 																		// 05/02/09 Creation du graphique	
$graph6->SetScale("linlin",0,80000,1,31);																	// 05/02/09 
$graph6->title->Set("Index Menusel Cumulé de ".$MONTHS[$month-1]." 20".$A );											// 05/02/09 

$bar = new BarPlot($ind_hc2); 
$bar2 = new BarPlot($ind_hp2); 
$bar ->SetColor("green"); 
$bar->SetFillColor("green");
$bar2 ->SetColor("red"); 
$bar2->SetFillColor("red");
//			$bar->SetLegend ("Index HC"); 																			// Légende de la courbe
//			$bar2->SetLegend ("Index HP"); 																			// Légende de la courbe
$graph5 ->legend->Pos( 0.05,0.5,"right" ,"center");														// Posiiton de la légende
$graph5 ->SetColor('#829FD9'); 
$graph6 ->legend->Pos( 0.05,0.5,"right" ,"center");														// 05/02/09 Posiiton de la légende
$graph6 ->SetColor('#829FD9'); 																			// 05/02/09 
$bar->SetShadow(); 
$bar2->SetShadow(); 
$bar->value->SetAngle(90);
$bar2->value->SetAngle(90);
$bar->value-> Show(); 
$bar2->value-> Show(); 
$d= new GroupBarPlot (array($bar ,$bar2)); 

$accbar = new AccBarPlot(array($bar,$bar2)); 															// 05/02/09 
$graph5->SetBackgroundGradient('blue:1.6','navy:1.6',GRAD_LEFT_REFLECTION,BGRAD_PLOT); 
$graph5->Add($d);
$graph6->SetBackgroundGradient('blue:1.6','navy:1.6',GRAD_LEFT_REFLECTION,BGRAD_PLOT); 
$graph6->Add($accbar);																					// 05/02/09 

//			$A=substr($jour_a_aff,2,2);																				// sert à donner un nom aux graphique car des pb lors du chgt de date, ancien graph tjrs affiché et pas rechargé
//			$M=substr($jour_a_aff,5,2);
//			$J=substr($jour_a_aff,8,2);
if (strlen($month)==1){$M="0".$month;}					//  Rajoute un Zero au chiffre des unités pr garder la meme lg de la string
else{$M=$month;}
$D=$A.$M;

if ($IMN==1)
{
$graph5->Stroke("images/graph4_$D.png");		 																// Affichage
echo "";  // 03/02/10
}//."
";
if ($IMC==1) 
{ 
$graph6->Stroke("images/graph5_$D.png");	 																	// 05/02/09  Affichage	
echo "";  // 03/02/10
}//."
";	}															// 05/02/09 
//		}
}		


Est ce que vous auriez une idée (pt qu'il existe des fonctions php ttes faites pour remplacer mes bricolages, mais sait pas)

Merci,
Messages postés
25
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
23 mars 2012

Je viens de lire ton précédant message, sry

En fait avant je faisant toutes mes extraction et graph sous php en allant ouvrir-extraire-traiter-fermer tous les fichiers logs en foramt CSV.
Ca marche bien, mais qd je demande de traiter + d'1 ans de data welcome le timeout du serveur. Et comme je compte bien ne pas mettre mon propre serveur chez moi, donc impossible à modifier le timeout du serveur.

voilà le pourquoi du passage en SQL. (enrichissant certes pour moi et qd meme casse-c******s pour ceux à qui je poser mes questions de newbee).
Mais si il existe d'autres solutions plus mieux bien.. ok

thx,
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
28
Pour jgraph, peut etre demandé directement
sur le site ou lire les tuto de jgraph

Mais dejà en divisant par plus de 60 le temps c'est pas mal comme optimisation

Je ne vois pas trop ou est le probleme, peux-tu redétaillé, où le problème est.

J'ai perdu le fil.
Messages postés
25
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
23 mars 2012

Bonjour,

après enquete voilà mon soucis:
Qd je fait cette requette:
// Extraction des valeurs MIN et MAX de HCHC et de HCHP
$sql =  "SELECT MIN(hchc) as min_hc2, MAX(hchc) as max_hc2,MIN(hchp) as min_hp2, MAX(hchp) as max_hp2 ,`date` as date_1  FROM $base_name GROUP BY `date`";
$result=mysql_query($sql) or die(mysql_error());

while($row = mysql_fetch_array($result))
{
//on recupere le jour et le mois pour faire les indices du tableau
//				echo ' date : '.$row['date_1'].'    ';
$day = date('j', strtotime($row['date_1'])); 
$month=  date('n', strtotime($row['date_1'])); 
echo ' row : '.$row['min_hc2'].' - '.$row['max_hc2'].' - '.$row['min_hp2'].' - '.$row['max_hp2'].'    ';
echo 'day : '.$day.'   ';
echo 'month : '.$month.'
';
$ind_hc[$month][$day] =$row['max_hc2']-$row['min_hc2'];
$ind_hp[$month][$day]=$row['max_hp2']-$row['min_hp2'];
}


J'ai bien cela:
row : 17409046 - 17441400 - 13696590 - 13725582 day : 1 month : 1
row : 17441400 - 17482346 - 13725582 - 13760751 day : 2 month : 1
row : 17482346 - 17515138 - 13760764 - 13792892 day : 3 month : 1
row : 17515138 - 17554808 - 13792895 - 13829996 day : 4 month : 1
row : 17554808 - 17595757 - 13829996 - 13868226 day : 5 month : 1
...
row : 18523039 - 18560050 - 14576697 - 14617424 day : 31 month : 1
row : 18560050 - 18593268 - 14617428 - 14642447 day : 1 month : 2
row : 18593268 - 18631859 - 14642447 - 14669187 day : 2 month : 2
row : 18631859 - 18660420 - 14669192 - 14694638 day : 3 month : 2
...etc...

En revanche lorsque je fait:
print_r($ind_hc);


j'ai ça (remis en forme)
Array ( [0] => 13 [1] => 32
[2] => Array ( [1] => 33218 [2] => 38591 [3] => 28561 [4] => 31760 [5] => 28263 [6] => 19422 [7] => 35067 [8] => 43321 [9] => 44387 [10] => 31734 [11] => 28738 [12] => 32254 [13] => 34533 [14] => 48654 [15] => 35951 [16] => 38979 [17] => 37986 [18] => 32839 [19] => 36562 [20] => 38824 [21] => 35892 [22] => 36073 [23] => 31194 [24] => 33801 [25] => 33064 [26] => 36756 [28] => 28416 )
[3] => Array ( [1] => 26223 [2] => 28741 [3] => 17479 [4] => 28106 [5] => 7969 [6] => 7502 [7] => 7705 [8] => 7145 [9] => 7493 [10] => 7477 [11] => 6975 [12] => 7381 [13] => 15687 [14] => 35869 [15] => 22815 [16] => 31239 [17] => 19440 [18] => 25872 [19] => 27381 [20] => 30092 [21] => 36445 [22] => 23681 [23] => 27396 [24] => 29233 [25] => 34102 [26] => 24143 [27] => 21715 [28] => 23783 [29] => 22524 [30] => 34105 [31] => 26338 )
[4] => Array ( [1] => 26499 [2] => 22193 [3] => 14041 [4] => 15558 [5] => 15111 [6] => 14399 [7] => 14344 [8] => 17503 [9] => 18044 [10] => 11088 [11] => 10382 [12] => 13275 [13] => 13264 [14] => 10604 [15] => 12467 [16] => 15321 [17] => 16542 [18] => 11896 [19] => 15433 [20] => 12678 [21] => 12569 [22] => 9471 [23] => 13586 [24] => 11208 [25] => 13522 [26] => 12578 [27] => 13232 [28] => 15141 [29] => 10715 [30] => 13151 )
[5] => Array ( [1] => 16116 [2] => 11783 [3] => 11473 [4] => 16420 [5] => 13062 [6] => 9735 [7] => 10724 [8] => 11926 [9] => 7418 [10] => 15324 [11] => 10118 [12] => 11997 [13] => 10580 [14] => 13164 [15] => 9068 [16] => 13276 [17] => 10603 [18] => 9896 [19] => 10214 [20] => 12759 [21] => 10904 [22] => 10124 [23] => 11927 [24] => 10063 [25] => 10339 [26] => 10234 [27] => 9574 [28] => 10026 [29] => 6925 [30] => 6175 [31] => 10797 )
[6] => Array ( [1] => 10253 [2] => 11430 [3] => 9634 [4] => 12516 [5] => 7738 [6] => 12379 [7] => 8947 [8] => 15419 [9] => 9388 [10] => 12215 [11] => 9780 [12] => 9632 [13] => 4924 [14] => 5166 [15] => 7848 [16] => 10908 [17] => 8738 [18] => 10825 [19] => 8751 [20] => 12352 [21] => 11212 [22] => 9599 [23] => 11151 [24] => 8168 [25] => 9737 [26] => 9501 [27] => 6508 [28] => 5564 [29] => 6055 [30] => 11403 )
[7] => Array ( [1] => 8337 [2] => 10191 [3] => 8288 [4] => 10622 [5] => 10428 [6] => 11306 [7] => 8329 [8] => 9424 [9] => 10799 [10] => 7867 [11] => 7408 [12] => 11329 [13] => 5936 [14] => 11171 [15] => 9619 [16] => 9934 [17] => 7836 [18] => 13642 [19] => 9748 [20] => 8489 [21] => 10317 [22] => 8420 [23] => 9757 [24] => 9743 [25] => 9202 [26] => 8112 [27] => 9139 [28] => 5819 [29] => 10439 [30] => 9731 [31] => 10702 )
[8] => Array ( [1] => 10490 [2] => 8604 [3] => 12288 [4] => 12891 [5] => 8804 [6] => 10894 [7] => 11558 [8] => 9422 [9] => 9949 [10] => 4039 [11] => 5768 [12] => 8101 [13] => 12525 [14] => 7607 [15] => 14229 [16] => 11541 [17] => 9682 [18] => 5142 [19] => 448 [20] => 11079 [21] => 7708 [22] => 10095 [23] => 12547 [24] => 11371 [25] => 8100 [26] => 11796 [27] => 9902 [28] => 10507 [29] => 9409 [30] => 10600 [31] => 13055 )
[9] => Array ( [1] => 8517 [2] => 9312 [3] => 10993 [4] => 12020 [5] => 11107 [6] => 12527 [7] => 11173 [8] => 10105 [9] => 11428 [10] => 11867 [11] => 8422 [12] => 10684 [13] => 11625 [14] => 9867 [15] => 13192 [16] => 9175 [17] => 15496 [18] => 8191 [19] => 11588 [20] => 12134 [21] => 9313 [22] => 9156 [23] => 9466 [24] => 12099 [25] => 10109 [26] => 12128 [27] => 13981 [28] => 8742 [29] => 13628 [30] => 7710 )
[10] => Array ( [1] => 13026 [2] => 10745 [3] => 4886 [4] => 12410 [5] => 14661 [6] => 11719 [7] => 9976 [8] => 9375 [9] => 10011 [10] => 13739 [11] => 13167 [12] => 16811 [13] => 14166 [14] => 13327 [15] => 24276 [16] => 36519 [17] => 23039 [18] => 24522 [19] => 29559 [20] => 24841 [21] => 17346 [22] => 18293 [23] => 14442 [24] => 21804 [25] => 22832 [26] => 20300 [27] => 20646 [28] => 21993 [29] => 21517 [30] => 23202 [31] => 22083 )
[11] => Array ( [1] => 22078 [2] => 18153 [3] => 21551 [4] => 24408 [5] => 25017 [6] => 24951 [7] => 19604 [8] => 29723 [9] => 34404 [10] => 23925 [11] => 29571 [12] => 9072 [13] => 26842 [14] => 20178 [15] => 18810 [16] => 20075 [17] => 18751 [18] => 14349 [19] => 26568 [20] => 20284 [21] => 17142 [22] => 9860 [23] => 9668 [24] => 18873 [25] => 23852 [26] => 22923 [27] => 24970 [28] => 20396 [29] => 20812 [30] => 15897 )
[12] => Array ( [1] => 16455 [2] => 16800 [3] => 19557 [4] => 15273 [5] => 19964 [6] => 22484 [7] => 20124 [8] => 13322 [9] => 14829 [10] => 18267 [11] => 16001 [12] => 22017 [13] => 19717 [14] => 22904 [15] => 24888 [16] => 17944 [17] => 24187 [18] => 18427 [19] => 23470 [20] => 27362 [21] => 20848 [22] => 24350 [23] => 16328 [24] => 17646 [25] => 15912 [26] => 24285 [27] => 21429 [28] => 22367 [29] => 16352 [30] => 14007 [31] => 15878 ) )


Donc le tableau n'a aucunes valeurs pour $ind_hc[1][...] et par contre à partir de ind_hc[2][...] il y a des choses.
Pourtant les logs $month=1 sont bien présent comme indiqué dans le résultat de la requete SQL.

Donc du coup qd j'essaye d'extraire la valeur pour le $month=1 ben j'ai:
Warning: Cannot use a scalar value as an array in

Voilà, je ne saisi pas trop le pb