Requête qui totalise selon des critères ?
Résolu/Fermé
emrh
Messages postés
427
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
9 avril 2024
-
3 juil. 2022 à 19:13
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 - 4 juil. 2022 à 15:58
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 - 4 juil. 2022 à 15:58
A voir également:
- Requête qui totalise selon des critères ?
- Nos systèmes ont détecté un trafic exceptionnel sur votre réseau informatique. cette page permet de vérifier que c'est bien vous qui envoyez des requêtes, et non un robot ✓ - Forum Virus
- Il y a eu un problème avec cette requête. nous travaillons à sa résolution aussi vite que nous le pouvons. - Forum Facebook
- Index equiv plusieurs critères - Forum Excel
- Maya cherche des mocassins noirs ou rouges en taille 40. filtrez la table selon ses critères. combien y a-t-il de résultats ? - Forum Access
- Requête sql pix - Forum Python
6 réponses
jee pee
Messages postés
40472
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
24 novembre 2024
9 428
Modifié le 3 juil. 2022 à 20:24
Modifié le 3 juil. 2022 à 20:24
Bonjour,
Voila une idée à affiner
avec la base pour tester je ferais surement une seule requête, sans le sous select et la pseudo table T.
Voila une idée à affiner
SELECT annee, presta, SUM(T.total) AS ca_total FROM ( SELECT compositions.prix*compositions.quantites AS total, YEAR(contrat.date_debut) as annee, CASE WHEN prestations.type = 3 THEN 3 ELSE 9 END AS presta FROM compositions INNER JOIN contrats ON compositions.id_contrat=contrats.id_contrat INNER JOIN prestations ON prestations.id_prestation = compositions.id_prestation WHERE contrats.etat =3 ) AS T GROUP BY annee, presta
avec la base pour tester je ferais surement une seule requête, sans le sous select et la pseudo table T.
jordane45
Messages postés
38312
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
Modifié le 3 juil. 2022 à 20:30
Modifié le 3 juil. 2022 à 20:30
Bonjour,
Essaye ça
Essaye ça
SELECT ANNEE , T.P_TYPE , SUM(T.total) AS ca_total FROM ( SELECT C.prix*C.quantites AS total ,CA.etat , YEAR(CA.date_debut) as ANNEE , IF (P.type = 3 , 'TYPE3', 'TYPEAUTRE') as P_TYPE FROM compositions C INNER JOIN contrats CA ON C.id_contrat=CA.id_contrat INNER JOIN prestations P ON P.id_prestation = C.id_prestation ) AS T WHERE T.etat=3 GROUP BY T.ANNEE, T.P_TYPE ORDER BY T.ANNEE DESC
emrh
Messages postés
427
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
9 avril 2024
20
4 juil. 2022 à 07:28
4 juil. 2022 à 07:28
Bonjour Jordan,
Merci pour ton aide, ta requête est exactement celle qu'il me fallait ! ;-)
Une fois écrit, ça semble simple ! Elle à le mérite d'être comprise par un débutant comme moi.
Je l'adopte !
Merci pour ton aide, ta requête est exactement celle qu'il me fallait ! ;-)
Une fois écrit, ça semble simple ! Elle à le mérite d'être comprise par un débutant comme moi.
Je l'adopte !
emrh
Messages postés
427
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
9 avril 2024
20
Modifié le 4 juil. 2022 à 07:56
Modifié le 4 juil. 2022 à 07:56
Avec ta proposition, j'ai bien dans PhpMyAdmin les 2 années 2022 et 2023 pour les prestations HEBERGEMENT et RESTAURATION, mais avec le code que j'ai fait, je n'ai plus que la dernière année de la requête selon le classement ASC ou DESC que j'utilise :
EDIT : Avec ou sans , à la fin de la ligne array("label"=> $data['ANNEE'], "y"=> $data['ca_total']),
// Connexion à la bdd : require('connexion.php'); $requete1 = $bdd->query(' SELECT ANNEE, T.P_TYPE, SUM(T.total) AS ca_total FROM ( SELECT C.prix*C.quantites AS total,CA.etat, YEAR(CA.date_debut) as ANNEE, IF (P.type = 3 , \'RESTAURATION\', \'HEBERGEMENT\') as P_TYPE FROM compositions C INNER JOIN contrats CA ON C.id_contrat=CA.id_contrat INNER JOIN prestations P ON P.id_prestation = C.id_prestation) AS T WHERE T.etat=3 GROUP BY T.ANNEE, T.P_TYPE ORDER BY T.ANNEE ASC '); while ($data = $requete1->fetch()) { // Hébergement : if($data['P_TYPE']=="HEBERGEMENT") $hebergement = array( array("label"=> $data['ANNEE'], "y"=> $data['ca_total']), ); // Restauration : if($data['P_TYPE']=="RESTAURATION") $restauration = array( array("label"=> $data['ANNEE'], "y"=> $data['ca_total']), ); }
EDIT : Avec ou sans , à la fin de la ligne array("label"=> $data['ANNEE'], "y"=> $data['ca_total']),
emrh
Messages postés
427
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
9 avril 2024
20
4 juil. 2022 à 07:54
4 juil. 2022 à 07:54
D'ailleurs, si à la fin de ma boucle WHILE j'ajoute manuellement les années qui n'existent pas dans la bdd
je n'ai plus que les années ajoutées à la main, celle de la boucle WHILE disparaissent !
je n'ai plus que les années ajoutées à la main, celle de la boucle WHILE disparaissent !
$hebergement = array( array("label"=> "2021", "y"=> 68279), array("label"=> "2020", "y"=> 30457), array("label"=> "2019", "y"=> 63977), array("label"=> "2018", "y"=> 57993), array("label"=> "2017", "y"=> 49702), array("label"=> "2016", "y"=> 45493), array("label"=> "2015", "y"=> 38460) ); $restauration = array( array("label"=> "2021", "y"=> 12117), array("label"=> "2020", "y"=> 697), array("label"=> "2019", "y"=> 2687), array("label"=> "2018", "y"=> 0), array("label"=> "2017", "y"=> 40), array("label"=> "2016", "y"=> 350), array("label"=> "2015", "y"=> 200) );
jordane45
Messages postés
38312
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
4 juil. 2022 à 08:57
4 juil. 2022 à 08:57
Noormal, tu écras les données dans tes variables....
par exemple.. au lieu de
il faudrait
par exemple.. au lieu de
$hebergement = array( array("label"=> $data['ANNEE'], "y"=> $data['ca_total']), );
il faudrait
$hebergement[] = array( array("label"=> $data['ANNEE'], "y"=> $data['ca_total']), );
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
emrh
Messages postés
427
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
9 avril 2024
20
4 juil. 2022 à 14:34
4 juil. 2022 à 14:34
J'ai essayé ta proposition, mais il y à qq chose que je dois mal faire parce que le graphique est
totalement plat, toutes les prestations sont à 0 !
Le résultat final, selon la doc de CanvasJs devrait être un truc de ce style :
(https://canvasjs.com/php-charts/dynamic-live-column-chart/)
Je me demande si je n'aurais pas intérêt à partir sur qq chose comme ça :
$hebergement .='array("label"=> "' . $data[\'ANNEE\'] . ', "y"=> ' . $data[\'ca_total\']),';
Le problème risque d'être la , en fermeture du dernier enregistrement !
totalement plat, toutes les prestations sont à 0 !
while ($data = $requete1->fetch()) { // Hébergement : if($data['P_TYPE']=="HEBERGEMENT"){ $hebergement[] = array( array("label"=> $data['ANNEE'], "y"=> $data['ca_total']), ); } // Restauration : if($data['P_TYPE']=="RESTAURATION"){ $restauration[] = array( array("label"=> $data['ANNEE'], "y"=> $data['ca_total']), ); } }
Le résultat final, selon la doc de CanvasJs devrait être un truc de ce style :
(https://canvasjs.com/php-charts/dynamic-live-column-chart/)
<?php $dataPoints = array( array("label"=> "Core 1", "y"=> 20), array("label"=> "Core 2", "y"=> 65), array("label"=> "Core 3", "y"=> 11), array("label"=> "Core 4", "y"=> 5), array("label"=> "Core 5", "y"=> 48), array("label"=> "Core 6", "y"=> 8), array("label"=> "Core 7", "y"=> 2), array("label"=> "Core 8", "y"=> 18) ); ?>
Je me demande si je n'aurais pas intérêt à partir sur qq chose comme ça :
$hebergement .='array("label"=> "' . $data[\'ANNEE\'] . ', "y"=> ' . $data[\'ca_total\']),';
Le problème risque d'être la , en fermeture du dernier enregistrement !
jordane45
Messages postés
38312
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
4 juil. 2022 à 15:54
4 juil. 2022 à 15:54
A mais non.. tu as un array en trop....
et puis, pour voir ce que contiennent tes variables et t'assurer qu'elles ont la structure souhaitée.. fais en des var_dump... ou des print_r ( après la boucle.. pas dedans hein.. )
PS: On a dérivé sur une question PHP ... on n'est plus en lien avec la question de départ ni le forum .. qui parlait juste d'une requête SQL.
Pour poursuivre cette discussion si tes soucis persistent, merci de recréer une discussion dans le forum php !
while ($data = $requete1->fetch()) { // Hébergement : if($data['P_TYPE']=="HEBERGEMENT"){ $hebergement[] = array("label"=> $data['ANNEE'], "y"=> $data['ca_total']); } // Restauration : if($data['P_TYPE']=="RESTAURATION"){ $restauration[] = array("label"=> $data['ANNEE'], "y"=> $data['ca_total']); } }
et puis, pour voir ce que contiennent tes variables et t'assurer qu'elles ont la structure souhaitée.. fais en des var_dump... ou des print_r ( après la boucle.. pas dedans hein.. )
echo "<pre>"; print_r($hebergement); print_r($restauration); echo "</pre>";
PS: On a dérivé sur une question PHP ... on n'est plus en lien avec la question de départ ni le forum .. qui parlait juste d'une requête SQL.
Pour poursuivre cette discussion si tes soucis persistent, merci de recréer une discussion dans le forum php !
emrh
Messages postés
427
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
9 avril 2024
20
4 juil. 2022 à 15:58
4 juil. 2022 à 15:58
Je teste ça dès que possible et te remercie une fois encore pour tes explications... des vrais cours de programmation !
(Désolé pour le hors sujet, c'est la passion ! ;-)
(Désolé pour le hors sujet, c'est la passion ! ;-)
4 juil. 2022 à 07:25
Merci pour ta requête qui fonctionne, j'ai juste corrigé le S à contrats.date_debut (ligne 3)...
J'ai appris grâce à elle le CASE, WHEN, ELSE et END !
À quoi correspond le 9 dans ELSE 9 d'ailleurs ?
4 juil. 2022 à 09:24
4 juil. 2022 à 14:09
J'aime assez l'idée d'utiliser des WHEN, ELSE et END comme dans n'importe quel autre langage de programmation. Je garde ça en mémoire car je risque d'en avoir besoin prochainement, mille mercis !