Ajouter les mois manquants à ma requete sql

Eléphanteau du PHP | 38 Messages

27 août 2023, 10:22

Bonjour à tous,
Pour alimenter mon graphique j'execute une requête qui va interroger ma base de données et voici un exemple de ce qui m'est retourné :

Code : Tout sélectionner

+------+------+ | oper | dte | +------+------+ | 1510 | 7 | | 5965 | 8 | | 250 | 10 | +------+------+
Comme vous le voyez dte qui représente les mois n'est pas complet avec un foreach j'obtien un tableau associatif comme ceci :
    $arr = [];

    $rs_all = $conn->prepare('SELECT sum(o.operation) oper, MONTH(o.date_operation)  dte
        FROM operation o 
        WHERE idx_foyer = 10 AND YEAR(o.date_operation) = YEAR(curdate())
        GROUP BY dte');
    $rs_all->execute();
 
    foreach($rs_all as $ind => $rs){
        $arr[$ind] = [
            'montant'=>$rs[0],
            'mois'=>$rs[1]
        ];
    }

Code : Tout sélectionner

array ( 0 => array ( 'montant' => 1510.0, 'mois' => 7, ), 1 => array ( 'montant' => 5965.0, 'mois' => 8, ), 2 => array ( 'montant' => 250.0, 'mois' => 10, ),
Pouvez vous me donner une piste pour ajouter au tableau associatif les mois manquants s'il vous plait ?
Merci d'avance pour votre aide.

Mammouth du PHP | 2703 Messages

27 août 2023, 18:28

faire une boucle afin de remplir un tableau avec des valeurs à 0 pour chaque mois.
modifier ce tableau avec le résultat de la requête.
retraiter le tableau si c'est mieux pour l'affichage du graphique de ne pas avoir de valeur à 0 au début et à la fin

à noter que le résultat de https://www.php.net/manual/fr/pdostatement.fetchall.php est tout à fait utilisable, sans repasser par un tableau construit autrement.

Avatar du membre
Mammouth du PHP | 1564 Messages

03 sept. 2023, 09:58

Créer un tableau multidimensionnel avec 12 index (les mois) :
$tableau = [];
for($i = 1; $i <= 12; $i ++){
	$tableau[$i] = [
		'mois' => $i,
		'montant' => 0,
	];
}
//puis dans ton while SQL, remplir le tableau :
foreach($requete as $index => $resultat){
	$tableau[$resultat[1]] = [
		'mois' => $resultat[1],
		'montant' => $resultat[0],
	];
}