online faq recherche accueil
 

Il y a 128 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

Question PHP/mySQL [somme de champs]

 
n°4702157
may²
hack n' slash
Posté le 20-02-2008 à 15:48:22  profilanswer
 

Bonjour,
 
Voilà, mon problème :
 
Je dois établir un classement pour un site web.
 
ma table est constituée ainsi
 
id
nom
prenom
resultat x1
résultat x2
....
 
et ma question est : est-il possible de faire directement la somme des résultats dans ma table dans un champs "somme" ou est-ce que je suis obligé de passer par une requête pour faire la somme des résultats ?
 
merci d'avance


Message édité par may² le 20-02-2008 à 15:49:49
n°4702158
seregmegil​mor
feu KaLiS
Profil : Modérateur
Posté le 20-02-2008 à 15:58:26  profilanswer
 

Hmm,
 

Code :
  1. Select id,nom,prenom,(resultat1 +  resultat2 + resultat3) as somme_res
  2. From....


 
?
Me semble que ça devrait fonctionner quelque chose comme ça


Message édité par seregmegilmor le 20-02-2008 à 15:58:45

---------------
Merci de ne pas m'envoyer des MP pour me poser des questions sur Diablo2&LoD, mais de les poser sur le forum.
n°4702162
DooMeeR
DooM shall never die.
Posté le 20-02-2008 à 17:01:21  profilanswer
 

Après ça dépend ce que tu entends par "somme" mais si tu veux une somme de tous les x1 de tous les utilisateurs par exemple ça donne SELECT sum(x1) FROM ...


Message édité par DooMeeR le 20-02-2008 à 17:02:17

---------------
www.doomeer.com
n°4702165
seregmegil​mor
feu KaLiS
Profil : Modérateur
Posté le 20-02-2008 à 17:07:50  profilanswer
 

Et pour aller plus loin dans la version de DooM, si il te faut la somme de chaque resultat xX par utilisateur (en partant du principe que tu peux avoir plusieurs lignes dans ta table pour chaque utilisateur)
ça donnerait un truc du genre

Code :
  1. SELECT nom,prenom,sum(resultat x1),sum(resultat x2),...
  2. FROM table
  3. GROUP BY nom,prenom


Message édité par seregmegilmor le 20-02-2008 à 17:07:59

---------------
Merci de ne pas m'envoyer des MP pour me poser des questions sur Diablo2&LoD, mais de les poser sur le forum.
n°4702170
icebird
Shalom frère utilisateur
Posté le 20-02-2008 à 17:35:37  profilanswer
 

j'imagine que tu veux obtenir un classement suivant la somme ?
 
tu dois pouvoir faire un SELECT * FROM table ORDER BY (champs1 + champs2)


---------------
« The worst thing about buying a Mac is having to tell your parents you are gay.»
n°4702188
may²
hack n' slash
Posté le 20-02-2008 à 18:45:18  profilanswer
 

oui, effectivement et c'est d'ailleurs un peu là que je suis perdu. Je suis un petit limité en php/mysql.
 
Donc je vois bien comment faire une requête pour additionner les champs mais après, je suis un peu perdu pour les classer dans l'ordre.

n°4702202
seregmegil​mor
feu KaLiS
Profil : Modérateur
Posté le 20-02-2008 à 19:41:21  profilanswer
 

Ben comme l'a indiqué Ice, je pense qu'il faudrait que ta requête ressemble à ça :
 

Code :
  1. SELECT nom,prenom,(resultat1+resultat2) as sum_res
  2. FROM table
  3. ORDER BY (resultat1+resultat2) DESC


 
comme ça tu as ta somme dans les retours de la requête et c'est trié (du plus grand au plus petit, virer le DESC pour l'autre sens)


---------------
Merci de ne pas m'envoyer des MP pour me poser des questions sur Diablo2&LoD, mais de les poser sur le forum.
n°4702212
may²
hack n' slash
Posté le 20-02-2008 à 20:09:59  profilanswer
 

donc si je fais pas trop fausse route ça doit donner un machin comme ça  
 

Code :
  1. <?php
  2. include('connexion.php');
  3. $requete=mysql_query("SELECT nom,prenom,(MTT4mars+C4mars) as sum_res
  4. FROM table_classement ORDER BY (MTT4mars+C4mars) DESC" ); $ligne=mysql_query($requete);
  5. echo "<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"1\">";
  6. for($i=0;$ligne>$i;$i++) {$resultat=mysql_fetch_array($requete);
  7. echo "<tr> <td width='100%'>"; echo $resultat['nom'];
  8. echo $resultat['prenom']; echo "</td> </tr>"; } echo "</table>"
  9. ?>


 
non mais ne rigolez pas, c'est déjà super positif, y'a pas de message d'erreurs, la page est vierge mais y'a pas de messages d'erreurs :D. D'un point de vu purement informatique, on peut dire que ça marche :D


Message édité par may² le 20-02-2008 à 20:12:36
n°4702220
seregmegil​mor
feu KaLiS
Profil : Modérateur
Posté le 20-02-2008 à 20:27:23  profilanswer
 

Juste un truc qui me parait bizarre et qui expliquerait que ça ne marche pas, c'est que tu fais
$requete = mysql_query(blabla)
puis
$ligne = mysql_query($requete)
tu fais deux fois de suite mysql_query()
 
Une façon assez efficace de faire une boucle de ce genre, ça serait de faire ça
 

Code :
  1. $requete = "SELECT nom,prenom,(MTT4mars+C4mars) as sum_res
  2. FROM table_classement ORDER BY (MTT4mars+C4mars) DESC";
  3. $requete = mysql_query($requete) OR die(mysql_error());
  4. echo "<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"1\">";
  5. while ($data = mysql_fetch_array($requete))
  6. {
  7. echo "<tr><td width='75%'>";
  8. echo htmlspecialchars($data['nom'])." ".htmlspecialchars($data['prenom']);
  9. echo "</td><td>";
  10. echo htmlspecialchars($data['sum_res']);
  11. echo "</td></tr>";
  12. }
  13. echo "</table>"


 
le "or die mysql_error()" t'affiche les erreurs mysql si la requête plante quelque part
et personellement, je fais toujours un htmlspecialchars sur les données qui proviennent d'une table qui auront pu être rentrées par un utilisateur, ce qui transforme les < > " ' en leur équivalent html, et évite que ça te foute le boxon si quelqu'un s'est amusé à mettre un </table> ou du php dans un des champs que tu vas afficher.
(puis j'ai rajouté l'affichage du sum_res)


Message édité par seregmegilmor le 20-02-2008 à 20:28:18

---------------
Merci de ne pas m'envoyer des MP pour me poser des questions sur Diablo2&LoD, mais de les poser sur le forum.
n°4702223
icebird
Shalom frère utilisateur
Posté le 20-02-2008 à 20:34:06  profilanswer
 

on t'enlève 1€ par ligne supplémentaire ou bien ? :D
 
sinon, ça clarifierait peut-être un peu d'utiliser deux variables pour la requête :
  $resultat = mysql_query($requete) OR die(mysql_error());
  $data = mysql_fetch_array($resultat)


---------------
« The worst thing about buying a Mac is having to tell your parents you are gay.»
n°4702226
may²
hack n' slash
Posté le 20-02-2008 à 20:38:45  profilanswer
 

Citation :

Juste un truc qui me parait bizarre et qui expliquerait que ça ne marche pas, c'est que tu fais  
$requete = mysql_query(blabla)  
puis  
$ligne = mysql_query($requete)  
tu fais deux fois de suite mysql_query()


 
oui, je me doutais un peu qu'il y'a une boulette par là ^^

n°4703483
may²
hack n' slash
Posté le 07-03-2008 à 18:14:07  profilanswer
 

question subsidiaire :
 
comment je peux faire apparraître la place du joueurs sans avoir à la rentrer dans la bd ?
 
place - nom / prénom / points
...
 
y'a une fonction pour incrémenter une ligne de 1 ?


Message édité par may² le 07-03-2008 à 18:22:33
n°4703486
Sbizz
J'ai vraiment une vie de merde
Posté le 07-03-2008 à 18:21:42  profilanswer
 

Tu peux pas. Faudrait que tu récupères au moins une donnée... les points. Faut donc passer par la BD ^.^

 

E/ d'ailleurs tout le reste aussi, mais c'est rapide ça, avec une boucle c'est vite fait.


Message édité par Sbizz le 07-03-2008 à 18:22:16
n°4703488
MetalGear
bêta testeur attitude
Profil : Modérateur
Posté le 07-03-2008 à 18:23:19  profilanswer
 

Tu dois je suppose faire un tri (order by dans le SQL ou procédure externe de tri), et gérer un compteur...


---------------
        MetalGear   aka   MetalGearLiquid
                >> Undead polyglotte <<
[:metalgear:9]       [:metalgear:5]      [:metalgear:8]       [:metalgear:7]
À lire absolument : FAQ et Aide du forum MD.net * FAQ Diablo2 * FAQ Warcraft3 * FAQ WoW * FAQ StarCraft II * Règles du forum dédié à StarCraft II
n°4703489
icebird
Shalom frère utilisateur
Posté le 07-03-2008 à 18:23:47  profilanswer
 

si il y a une seule page de résultat :
 
avant la boucle, met

$position = 1;


puis à la fin (enfin juste avant le } fermant) de la boucle (while), met un

$position++;


Et après ben tu peux simplement afficher $position, style

Code :
  1. echo "<tr><td width='75%'>";
  2. echo "<b>$position</b> - ";
  3. echo htmlspecialchars($data['nom'])." ".htmlspecialchars($data['prenom']);


 
edit: les gars vous servez à rien :o


Message édité par icebird le 07-03-2008 à 18:28:27

---------------
« The worst thing about buying a Mac is having to tell your parents you are gay.»
n°4703494
may²
hack n' slash
Posté le 07-03-2008 à 18:43:30  profilanswer
 

Je vous aime :love:

n°4703498
Sbizz
J'ai vraiment une vie de merde
Posté le 07-03-2008 à 19:10:26  profilanswer
 

ou alors tu fais un FOR(i=1; i<=max; i++) :kaola:
 
Il a édité son message APRAY moi :o Donc je sers :o Un point stoo :o

n°4703499
kypper_667
Im'avalounède, lol.
Posté le 07-03-2008 à 19:19:42  profilanswer
 

may² a écrit :

oui, effectivement et c'est d'ailleurs un peu là que je suis perdu. Je suis un petit limité en php/mysql.

Bah c'est moins facile que de poster sur un forum... Quoique.


---------------
Posté le o3|11|2oo7 à 12|2o|46 par Shoggynou : Non mais Kypper depuis genre 6 mois il est passé d'un gars à très cool à Grubnatz :hmm: - Posté le 29-o8-2oo7 à 14|26|05 par Incubeee_ : Oui, mais pour moi tu seras toujours Arcueid :o - Posté le o4-12-2oo6 à 21|55|41 par Simulacre : Ne t'inquiète pas, je te défoncerai tôt ou tard. : ) - Posté le 13-o4-2oo6 à o1|o8|37 par Bellandy : Sinon tu habites chez tes parents ? - Posté le 31-12-2oo5 à 21|3o|37 par Loline : mais mais Kyppy, tu n'as pas une grande vie sexuelle :heink: - Posté le o5-o8-2oo4 à 17|47|18 par Zack : J'ai l'impression d'être le seul à pas vraiment connaître Kypper... o_O
n°4703538
icebird
Shalom frère utilisateur
Posté le 07-03-2008 à 21:08:44  profilanswer
 

Sbizz a écrit :

ou alors tu fais un FOR(i=1; i<=max; i++) :kaola:
 
Il a édité son message APRAY moi :o Donc je sers :o Un point stoo :o


et tu définis max en faisant un SELECT COUNT(*) ? :D


Message édité par icebird le 07-03-2008 à 21:13:28

---------------
« The worst thing about buying a Mac is having to tell your parents you are gay.»
n°4703541
Sbizz
J'ai vraiment une vie de merde
Posté le 07-03-2008 à 21:13:05  profilanswer
 

Arf oui, mayrde, j'étais dans le PHP moi :( Excusez moi :cry:

n°4703542
icebird
Shalom frère utilisateur
Posté le 07-03-2008 à 21:14:40  profilanswer
 

en fait j'ai trouvé une meilleure vanne entre temps et j'ai édité mais trop tard :<


---------------
« The worst thing about buying a Mac is having to tell your parents you are gay.»
n°4703543
Sbizz
J'ai vraiment une vie de merde
Posté le 07-03-2008 à 21:20:57  profilanswer
 

Effectivement, c'dommage :ack:
 
Bien essayé =>


Aller à :
Ajouter une réponse