fonction sprintf avec PDO ?
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:
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:
WHERE YEAR(' . $champ_date . ') = %s
mais j'ai le message d'erreur suivant :
Citation:
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:
$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):
Citation:
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:
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