Bonjour,
Voici ma BDD mySql :
id..+...whenDate ..+...howPrice+
1 ...|...2007-04-14 ...|...125
2 ...|...2007-06-16 ...|...16
3 ...|...2008-10-18 ...|...15
4 ...|...2008-10-24 ...|...13
5 ...|...2008-12-22 ...|...125
6 ...|...2009-07-09 ...|...238
7 ...|...2009-07-26 ...|...234
8 ...|...2009-10-01 ...|...317
9 ...|...2009-10-03 ...|...430
10..|...2009-12-13 ...|...43
11..|...2009-12-14 ...|...52
12..|...2010-01-04 ...|...63
13..|...2010-01-22 ...|...749
+...|........................|.........+
J'aimerais bien afficher les chiffres d'affaires de chaque année, sous un tableau (array)
Il faut donc grouper les années où il y a eu les ventes
Ensuite, il faut regrouper les ventes par chaque mois de la même année
Voici ce que je veux obtenir :
array (size=4)
2007 =>
array (size=12)
0 => int 0
1 => int 0
2 => int 0
3 => string '125' (length=3)
4 => int 0
5 => string '16' (length=2)
6 => int 0
7 => int 0
8 => int 0
9 => int 0
10 => int 0
11 => int 02008 =>
array (size=12)
0 => int 0
1 => int 0
2 => int 0
3 => int 0
4 => int 0
5 => int 0
6 => int 0
7 => int 0
8 => int 0
9 => string '28' (length=2)
10 => int 0
11 => string '125' (length=3)2009 =>
array (size=12)
0 => int 0
1 => int 0
2 => int 0
3 => int 0
4 => int 0
5 => int 0
6 => string '472' (length=3)
7 => int 0
8 => int 0
9 => string '747' (length=3)
10 => int 0
11 => string '95' (length=2)2010 =>
array (size=12)
0 => string '812' (length=3)
1 => int 0
2 => int 0
3 => int 0
4 => int 0
5 => int 0
6 => int 0
7 => int 0
8 => int 0
9 => int 0
10 => int 0
11 => int 0
avec :
J'obtiens pour chaque année :
Code : Sélectionner tout - Visualiser dans une fenêtre à part WHERE YEAR(' . $champ_date . ') IS NOT NULL
array (size=4)
2007 =>
array (size=12)
0 => string '812' (length=3)
1 => int 0
2 => int 0
3 => string '125' (length=3)
4 => int 0
5 => string '16' (length=2)
6 => string '472' (length=3)
7 => int 0
8 => int 0
9 => string '775' (length=3)
10 => int 0
11 => string '220' (length=3)2008 =>array (size=12)
0 => string '812' (length=3)
1 => int 0
2 => int 0
3 => string '125' (length=3)
4 => int 0
5 => string '16' (length=2)
6 => string '472' (length=3)
7 => int 0
8 => int 0
9 => string '775' (length=3)
10 => int 0
11 => string '220' (length=3)
etc...
Donc en fait, c'est la totale de même mois de toutes les années.
Alors je pense d'utiliser :%s
Alors je fais ma requête comme cela :
mais j'ai le message d'erreur suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part WHERE YEAR(' . $champ_date . ') = %s
Du coûp, je mets la fonction : sprintfFatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 [ligne 24 voir plus bas]
Évidement, cette fois-ci j'ai une autre erreur (puisque je veux transformer mon objet en string):
Code : Sélectionner tout - Visualiser dans une fenêtre à part $req_ventes_mois->execute(sprintf($req_ventes_mois, $donnees_annees['an']));
Catchable fatal error: Object of class PDOStatement could not be converted to string in [ligne 43 voir plus bas]
Donc du coup je ne sais plus comment je peux obtenir ce que je veux.
Voici mes codes en totalité :
Est-ce que vous pouvez m'aider ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 try { $bdd = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); } catch (Exception $e) { die('Erreur connection mysql : ' . $e->getMessage()); } // trouver les années actives $req_annees = $bdd->prepare( 'SELECT YEAR(' . $champ_date . ') AS an FROM '. $tableData . ' GROUP BY an'); // trouver les ventes pour chaque année active // %s l'argument est traité et présenté comme une chaîne de caractères. $req_ventes_mois = $bdd->prepare('SELECT MONTH(' . $champ_date . ') AS parMois, COUNT(' . $champ_id . ') AS combienVente, SUM(' . $champ_prix . ') AS prixCout FROM '. $tableData . ' WHERE YEAR(' . $champ_date . ') = %s -- WHERE YEAR(' . $champ_date . ') IS NOT NULL GROUP BY parMois'); $req_annees->execute(); // années actives while ($donnees_annees = $req_annees->fetch(PDO::FETCH_ASSOC)) { // Initialiser le array pour chaque mois $arrayPrixCoutAns[$donnees_annees['an']] = array(0,0,0,0,0,0,0,0,0,0,0,0); // trouver les ventes par mois de l'année en cours //$req_ventes_mois->execute(); //$req_ventes_mois->execute(sprintf($req_ventes_mois, $donnees_annees['an'])); $req_ventes_mois->execute(vsprintf($req_ventes_mois, $donnees_annees['an'])); while ($donnees_mois = $req_ventes_mois->fetch(PDO::FETCH_ASSOC)) { $arrayPrixCoutAns[$donnees_annees['an']][$donnees_mois['parMois']-1] = $donnees_mois['prixCout']; } } die(var_dump($arrayPrixCoutAns));
Merci
Partager