VansFoxy Posté 9 Novembre 2012 Posté 9 Novembre 2012 Bonjour à tous, J'ai un petit souci pour compter tous les résultat d'une colonne dans ma table. Ma table s'appelle "conso", et la colonne en question est "litres". Dedans il y uniquement des chiffres, logique ce sont des litres... Alors voilà, imaginon qu'il y ait ces champs dans mes "litres" : 10 5 5 10 J'aimerais compter ces résultats, sans compter le premier. Au départ j'avais fait ceci : mysql_query ("SELECT SUM(litres) AS total FROM conso ORDER BY id ASC"); Et bien entendu, ça me sort un résultat de " 30 ". En suite j'ai ajouté un " LIMIT 1 , 0 ", pour que ça ne compte pas le premier résultat, mais ça n'est visiblement pas possible dans un select sum d'y ajouter un limit. Bref, j'espère avoir été assez clair, et que vous pourriez m'aider à résoudre mon problème Merci d'avance
BlackPage Posté 9 Novembre 2012 Posté 9 Novembre 2012 Salut, De ce que j'en sais, tu dois obligatoirement avoir un critère te permettant d'exclure certains enregistrement de ta requete. Dans ton cas, en admettant que tu aies une autre colonne index autoincrémentée, tu pourras rajouter dans ta requete : FROM conso WHERE Nom_Champ_Autoinc != 'une_certaine_valeur' Egalement, pour ne pas inclure les valeurs = 10 : FROM conso WHERE litres != '10' mais ta quatrième ligne sera alors également exclue... Bref pas de méthode miracle, donc bon courage à toi !
VansFoxy Posté 9 Novembre 2012 Auteur Posté 9 Novembre 2012 Merci à toi, en effet c'est pas l'idéale En fait il faut que chaque première ligne de chaque mois, ne soit pas prise en compte. Donc malheureusement ta solution ne sera pas bonne
jcaron Posté 9 Novembre 2012 Posté 9 Novembre 2012 Le LIMIT s'applique sur les lignes que le SELECT aurait données sans le LIMIT, pas sur les lignes qu'il utilise en interne. Pour ça, il faut utiliser une sous-requête: SELECT sum(litres) FROM (SELECT litres FROM conso ORDER BY id LIMIT 1,0) s Jacques.
VansFoxy Posté 9 Novembre 2012 Auteur Posté 9 Novembre 2012 Salut Jacques, Le petit " s " en bout de ligne, c'est une erreur ou non ? Sinon j'ai fait ça, mais ça ne fonctionne pas : $sql = mysql_query ("SELECT sum(litres) FROM (SELECT litres FROM conso ORDER BY id ASC LIMIT 1,0")); $somme = mysql_result ($sql,0); echo $somme;
jcaron Posté 9 Novembre 2012 Posté 9 Novembre 2012 Non le "s" est volontaire, c'est le nom de la sous-requête, qui est nécessaire. Tu peux utiliser le nom que tu veux, mais tu doit en donner un. Dans le bout de code que tu donnes, outre le nom de la sous-requête manquant, tu as inversé les " et la ) à la fin, donc ce n'est ni du PHP valide ni du SQL valide. D'ailleurs je pense que php doit te le dire de façon très claire. Jacques. EDIT: typo
VansFoxy Posté 10 Novembre 2012 Auteur Posté 10 Novembre 2012 Hello, en effet j'ai inversé le " avec la ) . Cependant je vois pas du tout où placer ton " s ", je suis désole je n'ai jamais utilisé cette fonction au bout d'une ligne SQL. En reprenant mon exemple, peux tu me dire où ça cloche stp : $sql = mysql_query ("SELECT sum(litres) FROM (SELECT litres FROM conso ORDER BY id ASC LIMIT 1,0)s"); $somme = mysql_result ($sql,0); echo $somme; Car là je n'ai plus d'erreur, ça n'affiche rien du tout en fait
jcaron Posté 10 Novembre 2012 Posté 10 Novembre 2012 Qu'est-ce-que ça donne si tu essaies la requête dans phpmyadmin ou équivalent? Jacques.
jcaron Posté 11 Novembre 2012 Posté 11 Novembre 2012 Logiquement, ça veut dire qu'il n'y a aucune ligne renvoyée par la sous-requête. Si tu ne tapes que la sous-requête, ça donne quoi? Jacques.
VansFoxy Posté 11 Novembre 2012 Auteur Posté 11 Novembre 2012 C'est vraiment bizarre, voilà ce que me sort la sous requète : Je laisse un imprim écran de ma table conso, ça te parlera sûrement plus : Vois tu où est le souci, pour faire un sum de mes litres, sans prendre la première ligne de ma table avec le limit ? Merci
jcaron Posté 11 Novembre 2012 Posté 11 Novembre 2012 J'avais repris le LIMIT 1,0 que tu avais donné (je n'utilise pas mysql mais postgresql qui a une syntaxe différente: OFFSET 1), mais ce n'est pas la bonne méthode pour sauter la première ligne (ça revient à dire "0 lignes après la première"). Il faut utiliser un LIMIT 1,beaucoup, par exemple LIMIT 1,1000000000. Jacques.
VansFoxy Posté 12 Novembre 2012 Auteur Posté 12 Novembre 2012 Super, on y est arrivé ! Merci beaucoup de ton aide A bientôt
VansFoxy Posté 12 Novembre 2012 Auteur Posté 12 Novembre 2012 Ah mince, juste un dernier détail, quand je fais un sum de mes litres, il ne me prend pas en compte tout ce qui est après la virgule. Donc ma moyenne est faussée. Pour rappel mon code ressemble à ça : $sql = mysql_query ("SELECT sum(litres) FROM (SELECT litres FROM conso WHERE mois=11 ORDER BY id ASC LIMIT 1,1000000)s"); $somme = mysql_result ($sql,0); echo "$somme"."L<br>"; J'ai dans ma table, une valeur de 642,62L, et quand je fais le echo $somme ça m'affiche une valeur de 642
yuston Posté 12 Novembre 2012 Posté 12 Novembre 2012 Salut, Ta colonne litres a été enregistrée sous quel type? Float? Varchar? Decimal?
VansFoxy Posté 12 Novembre 2012 Auteur Posté 12 Novembre 2012 Ah zut ! c'est sous forme de text, je dois mettre lequel ?
Dadou Posté 12 Novembre 2012 Posté 12 Novembre 2012 Quand je vois 170.8 et 642,62 je suis certain que c'est du varchar au lieu du float Cela doit être soit du float, soit du décimal, et pour mysql le séparateur décimal est le point, donc toutes tes valeurs avec virgules sont a corriger
VansFoxy Posté 12 Novembre 2012 Auteur Posté 12 Novembre 2012 Alors j'ai bien mis float, et 642.62 ça me sort ça quand j'affiche le nombre de litre sur ma page 642.6199951171875
Dadou Posté 12 Novembre 2012 Posté 12 Novembre 2012 Comme type met float(2) ou préfère lui le decimal, quoique non, le decimal est traduit comme du char, donc pas vraiment bon pour les calcul, donc float(2)
VansFoxy Posté 12 Novembre 2012 Auteur Posté 12 Novembre 2012 j'ai tjr cette affichage super long après la virgule. quand tu dis float 2 c'est sa valeur ?
captain_torche Posté 12 Novembre 2012 Posté 12 Novembre 2012 2 c'est le nombre de décimales après la virgule.
VansFoxy Posté 12 Novembre 2012 Auteur Posté 12 Novembre 2012 En clair je dois mettre ou dans phpmyadmin ce 2 ? Je suis pas super fort j'ai un peu de mal a suivre tout ce que vous dites
VansFoxy Posté 12 Novembre 2012 Auteur Posté 12 Novembre 2012 Je n'ai pas de float 2 uniquement float dans type de ma colone. J'ai taille/valeur, défaut, interclassement, attribut, null, type mime
Dadou Posté 12 Novembre 2012 Posté 12 Novembre 2012 C'est dans taille / valeur, comme pour les varchar On me dit que le type decimal est au final mieux pour les calculs comme les sommes, sinon, tu risques de te faire chier avec les arrondis du float
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant