par
codecodecodec » 19 avr. 2019, 13:38
Bonjour à tous,
Depuis quelques mois, je suis entrain de développer un petite interface web pour le boulot. Jusqu'à maintenant j'ai toujours trouvé les solutions à mon ou mes problèmes mais en ce moment je bute sur une requête multiple.
le
but: Après avoir rempli un formulaire, en choisissant Deux
Services (Achat, Comm), une
DATE de début et une
DATE de fin concernant la table
demande_interplay l'utilisateur pourra voir
le compte par mois et par service sous la forme dans un graphique grâce à chartjs.
La table '
Demande_interplay' à plusieurs champs :
-
Services (varchar)
-
Date_time (datetime)
J'ai réussi à créer ma requête lorsque je sélectionne 1 service, le graphique s'affiche correctement.
voici mon code pour 1 service :
$chart_x ="";
$chart_y ="";
$req_chart = $bdd->prepare("SELECT COUNT(*) AS nb_demande, DATE_FORMAT(date_time,'%m-%y') AS mois_annee from demande_interplay WHERE services= :services_chart AND date_time BETWEEN :date_in_chart AND :date_out_chart GROUP BY mois_annee");
$req_chart->bindValue(':services_chart', $services_chart, PDO::PARAM_STR);
$req_chart->bindValue(':date_in_chart', $date_in_chart, PDO::PARAM_STR);
$req_chart->bindValue(':date_out_chart', $date_out_chart, PDO::PARAM_STR);
$req_chart->execute();<br> $result_chart = $req_chart->fetchall(PDO::FETCH_ASSOC);
foreach($result_chart as $string_chart => $string_chart_seg)
{
/**Je recupere deux strings un pour l'ordonnée avec le count par mois et un pour l'abscisse avec mes dates de début et de fin en mode 'mois_annee' **/
$chart_x .= $string_chart_seg['mois_annee']."', '";
$chart_y .= $string_chart_seg['nb_demande'].", ";
}
$req_chart->closeCursor();
Par contre quand je sélectionne 2 services, ma requête me renvoie un count total par service sur tous les mois. Mes deux GROUP BY sur les requetes 'count' ne fonctionnent pas.
$chart_x_1 ="";
$chart_y_1 ="";
$chart_y_2 ="";
$req_chart_1 = $bdd->prepare("SELECT DATE_FORMAT(date_time,'%m-%y') AS mois_annee,
(SELECT COUNT(services) from demande_interplay WHERE services= :services_chart_1 AND date_time BETWEEN :date_in_chart AND :date_out_chart GROUP BY mois_annee) AS nb_demande_1,
(SELECT COUNT(services) from demande_interplay WHERE services= :services_chart_2 AND date_time BETWEEN :date_in_chart AND :date_out_chart GROUP BY mois_annee) AS nb_demande_2
from demande_interplay WHERE date_time BETWEEN :date_in_chart AND :date_out_chart GROUP BY mois_annee ");
$req_chart_1->bindValue(':services_chart_1', $services_chart_1, PDO::PARAM_STR);
$req_chart_1->bindValue(':services_chart_2', $services_chart_2, PDO::PARAM_STR);
$req_chart_1->bindValue(':date_in_chart', $date_in_chart, PDO::PARAM_STR);
$req_chart_1->bindValue(':date_out_chart', $date_out_chart, PDO::PARAM_STR);
//$req_chart_1->bindValue(':workflow_chart', $workflow_chart, PDO::PARAM_STR);
//
$req_chart_1->execute();
$result_chart_1 = $req_chart_1->fetchall(PDO::FETCH_ASSOC);
foreach($result_chart_1 as $string_chart_1 => $string_chart_seg_1)
{
/**Je recupere 3 strings, deux pour l'ordonnée avec le count par mois et par service et un pour l'abscisse avec mes dates de début et de fin en mode 'mois_annee' **/
$chart_x_1 .= $string_chart_seg_1['mois_annee']."', '";
$chart_y_1 .= $string_chart_seg_1['nb_demande_1'].", ";
$chart_y_2 .= $string_chart_seg_1['nb_demande_2'].", ";
}<br> $req_chart_1->closeCursor();
Est ce possible de faire ça une seule requête?
J'espere que j'ai été assez claire et pas trop long....
Cordialitude,
Codecodecodec
Bonjour à tous,
Depuis quelques mois, je suis entrain de développer un petite interface web pour le boulot. Jusqu'à maintenant j'ai toujours trouvé les solutions à mon ou mes problèmes mais en ce moment je bute sur une requête multiple.
le [b]but[/b]: Après avoir rempli un formulaire, en choisissant Deux [b]Services[/b] (Achat, Comm), une[b] DATE[/b] de début et une [b]DATE [/b]de fin concernant la table [b]demande_interplay[/b] l'utilisateur pourra voir [b]le compte par mois et par service[/b] sous la forme dans un graphique grâce à chartjs.
La table '[b]Demande_interplay[/b]' à plusieurs champs :
- [b]Services[/b] (varchar)
- [b]Date_time[/b] (datetime)
J'ai réussi à créer ma requête lorsque je sélectionne 1 service, le graphique s'affiche correctement.
voici mon code pour 1 service :
[PHP]
$chart_x ="";
$chart_y ="";
$req_chart = $bdd->prepare("SELECT COUNT(*) AS nb_demande, DATE_FORMAT(date_time,'%m-%y') AS mois_annee from demande_interplay WHERE services= :services_chart AND date_time BETWEEN :date_in_chart AND :date_out_chart GROUP BY mois_annee");
$req_chart->bindValue(':services_chart', $services_chart, PDO::PARAM_STR);
$req_chart->bindValue(':date_in_chart', $date_in_chart, PDO::PARAM_STR);
$req_chart->bindValue(':date_out_chart', $date_out_chart, PDO::PARAM_STR);
$req_chart->execute();<br> $result_chart = $req_chart->fetchall(PDO::FETCH_ASSOC);
foreach($result_chart as $string_chart => $string_chart_seg)
{
/**Je recupere deux strings un pour l'ordonnée avec le count par mois et un pour l'abscisse avec mes dates de début et de fin en mode 'mois_annee' **/
$chart_x .= $string_chart_seg['mois_annee']."', '";
$chart_y .= $string_chart_seg['nb_demande'].", ";
}
$req_chart->closeCursor();
[/PHP]
Par contre quand je sélectionne 2 services, ma requête me renvoie un count total par service sur tous les mois. Mes deux GROUP BY sur les requetes 'count' ne fonctionnent pas.
[PHP]
$chart_x_1 ="";
$chart_y_1 ="";
$chart_y_2 ="";
$req_chart_1 = $bdd->prepare("SELECT DATE_FORMAT(date_time,'%m-%y') AS mois_annee,
(SELECT COUNT(services) from demande_interplay WHERE services= :services_chart_1 AND date_time BETWEEN :date_in_chart AND :date_out_chart GROUP BY mois_annee) AS nb_demande_1,
(SELECT COUNT(services) from demande_interplay WHERE services= :services_chart_2 AND date_time BETWEEN :date_in_chart AND :date_out_chart GROUP BY mois_annee) AS nb_demande_2
from demande_interplay WHERE date_time BETWEEN :date_in_chart AND :date_out_chart GROUP BY mois_annee ");
$req_chart_1->bindValue(':services_chart_1', $services_chart_1, PDO::PARAM_STR);
$req_chart_1->bindValue(':services_chart_2', $services_chart_2, PDO::PARAM_STR);
$req_chart_1->bindValue(':date_in_chart', $date_in_chart, PDO::PARAM_STR);
$req_chart_1->bindValue(':date_out_chart', $date_out_chart, PDO::PARAM_STR);
//$req_chart_1->bindValue(':workflow_chart', $workflow_chart, PDO::PARAM_STR);
//
$req_chart_1->execute();
$result_chart_1 = $req_chart_1->fetchall(PDO::FETCH_ASSOC);
foreach($result_chart_1 as $string_chart_1 => $string_chart_seg_1)
{
/**Je recupere 3 strings, deux pour l'ordonnée avec le count par mois et par service et un pour l'abscisse avec mes dates de début et de fin en mode 'mois_annee' **/
$chart_x_1 .= $string_chart_seg_1['mois_annee']."', '";
$chart_y_1 .= $string_chart_seg_1['nb_demande_1'].", ";
$chart_y_2 .= $string_chart_seg_1['nb_demande_2'].", ";
}<br> $req_chart_1->closeCursor();
[/PHP]
Est ce possible de faire ça une seule requête?
J'espere que j'ai été assez claire et pas trop long.... :?
Cordialitude,
Codecodecodec