VansFoxy Posté 8 Décembre 2012 Posté 8 Décembre 2012 Bonjour à tous, Je viens vers vous car j'ai à nouveau un problème qui cette fois dépasse mes connaissances de très loin. Je suis en train de créer un petit module en php, avec une base de donnée pour gérer la consommation de camions. Je vais essayer d'être assez clair dans mon explication. Tout d'abord, j'ai une colonne dans ma table qui s'appelle "plein", et si la valeur est de "1" c'est que le camion a fait un plein complet, si elle est de "2" c'est qu'il a fait qu'un complément. Pour calculer la consommation du mois en cours, j'ai besoin de récupérer des infos sur le mois d'avant, c'est à dire les kilomètres (km dans ma table), de la dernière prise de gasoil complète. Mais c'est la le hic, car c'est très facile de faire ce qui est au dessus, j'aurais besoin de sélectionner les pleins qui ne sont pas complet, s'il y en a, après le dernier plein complet du mois précédent. J'espère que c'est assez clair pour vous. Si vous avez un petit bout de code à me suggérer, je vous en serai très reconnaissant, car là je suis bloqué. Merci à vous d'avance. Je vous poste mon code, qui fonctionne très bien, mais comme je vous disais si à partir du dernier plein du mois précédent, les litres des plein pas complet doivent être mis sur le mois d'après, et je vois pas comment faire pour les sélectionner function calcul_conso($mois) { $req = mysql_query("select * from conso where mois=$mois ORDER BY id ASC"); if (mysql_num_rows($req) >= 1 ) { $req_plein = mysql_query("select * from conso where mois=$mois order by id DESC limit 0 , 1"); $plein = mysql_fetch_array($req_plein); if ($plein["plein"] == "1") { $nb_mois = $mois - 1; $nb_annee = date(""); $req_km1 = mysql_query("select * from conso where mois=$nb_mois order by id DESC limit 0 , 1"); $data1 = mysql_fetch_array($req_km1); $km_bas = $data1["km"]; $req_km2 = mysql_query("select * from conso where mois=$mois order by id DESC limit 0 , 1"); $data2 = mysql_fetch_array($req_km2); $km_haut = $data2["km"]; $req_km = $km_haut - $km_bas; $sql = mysql_query ("SELECT sum(litres) FROM (SELECT litres FROM conso WHERE mois=$mois ORDER BY id ASC)s"); $somme = mysql_result ($sql,0); $somme = str_replace(".",",",$somme); echo "$req_km"."km<br>"; echo "$somme"."L<br>"; $moyenne = $somme / $req_km * 100; $moyenne = number_format($moyenne,2); $moyenne = str_replace(".",",",$moyenne); echo "$moyenne"."L/100km"; } else { echo "manque plein"; } } else { echo "rien"; } }
BlackPage Posté 8 Décembre 2012 Posté 8 Décembre 2012 Salut, Je ne vois pas de souci bloquant : 1. Récup le dernier plein du mois dernier $req_plein = mysql_query("select id from conso where mois='$avant_dernier_mois' and plein = '1' order by id DESC limit 0 , 1"); 2. Récup tous les kms des non pleins du mois derniers postérieurs au point 1. $req_pas_plein = mysql_query("select sum(kms) from conso where mois='$avant_dernier_mois' and plein = '2' and id > '".$req_plein["id"]."' "); Normalement le tour est joué, $req_pas_plein contient la somme demandée... Bon courage pour la suite !
VansFoxy Posté 8 Décembre 2012 Auteur Posté 8 Décembre 2012 Ah oui super c'est exactement ce qu'il me fallait. C'est vrai que c'est assez simple maintenant que tu las fait, j'ai pas encore l'habitude des sum. Merci bien
VansFoxy Posté 8 Décembre 2012 Auteur Posté 8 Décembre 2012 J'ai bien fait comme tu as dit, mais ça m'affiche "Resource id #21" . Je pense que c'est quand le résultat est négatif, ça affiche ça non ? Faut que je trouve un moyen de résoudre ça
VansFoxy Posté 10 Décembre 2012 Auteur Posté 10 Décembre 2012 Bonjour, je ne m'en sors pas avec cette erreur "resource id..." Mon code actuel est : $sql_pas_plein = mysql_query("select id from conso where mois=$nb_mois_km_bas AND plein=1 ORDER BY id DESC limit 0 , 1") or die(mysql_error()); $pas_plein = mysql_fetch_array($sql_pas_plein); $nb_pas_plein = mysql_query("select sum(litres) from conso where mois='$nb_mois_km_bas' and plein = '2' and id > '".$pas_plein["id"]."' ") or die(mysql_error()); echo "$nb_pas_plein<br>"; Je vous laisse un screen de ce que ça m'affiche :
kendyan Posté 10 Décembre 2012 Posté 10 Décembre 2012 Salut, $nb_pas_plein = mysql_query("select sum(litres) from conso where mois='$nb_mois_km_bas' and plein = '2' and id > '".$pas_plein["id"]."' ") or die(mysql_error()); est une requête dont tu dois exploiter le résultat. De ce fait : $nb_pas_plein = mysql_query("select sum(litres) as sommelitre from conso where mois='$nb_mois_km_bas' and plein = '2' and id > '".$pas_plein["id"]."' ") or die(mysql_error()); $traitement = mysql_fetch_assoc($nb_pas_plein); echo $traitement['sommelitre']; Kendyan.
VansFoxy Posté 31 Décembre 2012 Auteur Posté 31 Décembre 2012 Avec un peu de retard, merci beaucoup.Je n'ai pas encore eu l'occasion de tester, je verrai ce que ça donne.Merci encore
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant