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 0
2008 =>
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
WHERE YEAR(' . $champ_date . ') IS NOT NULL
J'obtiens pour chaque année :
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
WHERE YEAR(' . $champ_date . ') = %s
mais j'ai le message d'erreur suivant :
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 [ligne 24 voir plus bas]
Du coûp, je mets la fonction : sprintf
Code : Sélectionner tout - Visualiser dans une fenêtre à part
$req_ventes_mois->execute(sprintf($req_ventes_mois, $donnees_annees['an']));
Évidement, cette fois-ci j'ai une autre erreur (puisque je veux transformer mon objet en string):
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é :
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));
Est-ce que vous pouvez m'aider ?

Merci