IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

trier un résultat d'addition


Sujet :

EDI, CMS, Outils, Scripts et API PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 39
    Par défaut trier un résultat d'addition
    Bonjour,
    Après une matinée de recherche et de bidouillage, je demande un peu d'aide.
    J'ai un petit script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    <html>
    <head>
    <title>Statistique </title>
     
    </head>
     
    <body>
     
    <TABLE BORDER WIDTH=500>
     
    <tr bgcolor="#CC0000">
           <td><center><b><font face="Verdana" size="2" color="#FFFFFF">Nom</font></b></center></td>
           <td>&nbsp;<b><font face="Verdana" size="2" color="#FFFFFF">Prenom</font></b></td>
           <td>&nbsp;<b><font face="Verdana" size="2" color="#FFFFFF">But</font></b></td>
    	   <td>&nbsp;<b><font face="Verdana" size="2" color="#FFFFFF">Assist</font></b></td>
    	   <td>&nbsp;<b><font face="Verdana" size="2" color="#FFFFFF">Total</font></b></td>
     
    	   </tr></br>
     
    <?php
     
    $conn = mysql_connect("localhost", "", "");
    if (!$conn) {
    echo "Impossible de se connecter à la base de données : " . mysql_error();
       exit;
    }
     
    if (!mysql_select_db("")) {
       echo "Impossible de sélectionner la base mydbname : " . mysql_error();
       exit;
    }
     
     
     
    $sql = "SELECT `id` ,`nom` , `prenom` ,`but` ,`assist` FROM stat 
    WHERE 1 ";
     
    $result = mysql_query($sql);
     
    if (!$result) {
       echo "Impossible d'exécuter la requête ($sql) dans la base : " . mysql_error();
       exit;
    }
     
    if (mysql_num_rows($result) == 0) {
       echo "Aucune ligne trouvée, rien à afficher.";
       exit;
    }
     
     
    while ($val = mysql_fetch_array($result, MYSQL_ASSOC)) // parcours des resultats  
     
    {  
    $id = $val['id'];
    $nom = $val['nom'];
    $prenom = $val['prenom'];
    $but = $val['but'];
    $assist = $val['assist'];
    $resultat=$but+$assist;
     
     
    ?> <tr bgcolor="#FFFFFF"" class="tableau" width="500">
                               <td><font face="Verdana" size="2" color="#333333">&nbsp;
                                     <? echo $nom = $val['nom'] ?>
                               </font></td>
    						   <td><font face="Verdana" size="2" color="#333333">&nbsp;
                                   <? echo $prenom = $val['prenom'] ?>
                               </font></td>
    						   <td><center><font face="Verdana" size="2" color="#333333">&nbsp;
                                  <? echo $but = $val['but'] ?>
                               </font></center></td>
    						   <td><font face="Verdana" size="2" color="#333333">&nbsp;
                                   <? echo $assist = $val['assist'];?>
                               </font></td>
    						   <td><font face="Verdana" size="2" color="#333333">&nbsp;
                                   <? echo $resultat ?>
                               </font></td>	
     
                             </tr>
    <?
     
    } 
     
    mysql_free_result($result);
     
    ?>
    </TD> 
    </TABLE>
     
    </body>
    </html>
    qui marche très bien
    Voir le résultat:
    http://www.forwardhc.ch/~premiere/statistique.php

    J'aimerai pouvoir trier la colonne du total (Résultat)
    Merci de votre aide.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 24
    Par défaut
    Si tu veux trier des résultats sur une variable qui n'est pas dans ta table MySQL tu dois d'abord récupérer tous les résultats dans une première étape et stocker tout dans des tableaux, sans rien afficher (une bonne pratique d'une manière générale même si tu n'as pas de tri à faire).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
    $resultat = array();
    while (ta requête) {
    ...
        $assist[]   = $val['assist'];
        $resultat[] = $val['but']+$val['assist'];
    }
    Ensuite tu tries avec array_multisort, ça va certainement ressembler à ça :

    array_multisort($resultat, SORT_DESC, $nom, etc.);

    Enfin tu parcoures avec un for each et tu affiches.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 39
    Par défaut
    Merci d'avoir repondu, c'est très sympa.
    J'ai essayé (Je suis un débutant) mais j'ai un message d'erreur:
    Warning: array_multisort() [function.array-multisort]: Argument #1 is expected to be an array or sorting flag that has not already been specified in /home/www/799fd304049153850494d8da33f0c331/users/premiere/web/statistique_2.php on line 67
    La partie du script modifié donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    if (mysql_num_rows($result) == 0) {
       echo "Aucune ligne trouvée, rien à afficher.";
       exit;
    }
    $resultat = array();
     
    while ($val = mysql_fetch_array($result, MYSQL_ASSOC))
     {
    	$id = $val['id'];
    	$nom = $val['nom'];
    	$prenom = $val['prenom'];
    	$but[]   = $val['but'];
        $assist[]   = $val['assist'];
        $resultat[] = $val['but']+$val['assist'];
    }
     
     while ($val = array_multisort($resultat, SORT_DESC, $resultat)) // parcours des resultats  
     
    {  
    $id = $val['id'];
    $nom = $val['nom'];
    $prenom = $val['prenom'];
    $but = $val['but'];
    $assist = $val['assist'];
    $resultat=$but+$assist;

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Par défaut
    Bien je ne sais pas si je suis dans le champs, mais je crois qu'il serait tout simplement plus facile de mettre un ORDER BY dans ta requête SQL, non ?

    Quelquechose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $sql = "SELECT `id` ,`nom` , `prenom` ,`but` ,`assist`, SUM(but + assit) as total FROM stat 
    WHERE 1 ORDER BY total";

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 24
    Par défaut
    Citation Envoyé par Defrancesco
    Merci d'avoir repondu, c'est très sympa.
    J'ai essayé (Je suis un débutant) mais j'ai un message d'erreur:

    La partie du script modifié donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    if (mysql_num_rows($result) == 0) {
       echo "Aucune ligne trouvée, rien à afficher.";
       exit;
    }
    $resultat = array();
     
    while ($val = mysql_fetch_array($result, MYSQL_ASSOC))
     {
    	$id = $val['id'];
    	$nom = $val['nom'];
    	$prenom = $val['prenom'];
    	$but[]   = $val['but'];
        $assist[]   = $val['assist'];
        $resultat[] = $val['but']+$val['assist'];
    }
     
     while ($val = array_multisort($resultat, SORT_DESC, $resultat)) // parcours des resultats  
     
    {  
    $id = $val['id'];
    $nom = $val['nom'];
    $prenom = $val['prenom'];
    $but = $val['but'];
    $assist = $val['assist'];
    $resultat=$but+$assist;
    Tu dois retirer ce qui était dans ta boucle while initiale : il ne faut garder que ce while là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    while ($val = mysql_fetch_array($result, MYSQL_ASSOC))
     {
        $id[] = $val['id'];
        $nom[] = $val['nom'];
        $prenom[] = $val['prenom'];
        $but[]   = $val['but'];
        $assist[]   = $val['assist'];
        $resultat[] = $val['but']+$val['assist'];
    }
    Puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    array_multisort($resultat, SORT_DESC, $id, $nom, $prenom, $but, $assist);
    for each ($resultat as $indice => $valeur) {
       // Ici ton tableau HTML avec les valeurs : $nom[$indice], etc.
    }
    Et sinon oui comme dit Tiois tu peux aussi faire ce tri dans la requête MySQL en rajoutant la colonne, comme ta fonction est simple (somme) c'est même plus immédiait.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 39
    Par défaut
    Merci à tous de consacrer un peu de temps à un vieux sfchnock comme moi.
    Bon J'ai essayé de modifier ma requête comme tiois me l'a suggéré, mais j'ai ce message d'erreur:
    Impossible d'exécuter la requête (SELECT `id` ,`nom` , `prenom` ,`but` ,`assist`, SUM(but + assist) as total FROM stat WHERE 1 ORDER BY total) dans la base : Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
    Je ne sais plus à quel saint me dévoué.

  7. #7
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Par défaut
    Modifie ta requête comme suit alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT `id` ,`nom` , `prenom` ,`but` ,`assist`, SUM(but + assist) as total FROM stat WHERE 1 GROUP BY id ORDER BY total


    De plus, je ne comprends pas pourquoi tu te sert de "WHERE 1"

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 24
    Par défaut
    Normal il te tend des pièges

    SUM ne sert pas à additionner deux choses mais à sommer une colonne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = "SELECT `id` ,`nom` , `prenom` ,`but` ,`assist`, `but` + `assist` as total FROM stat ORDER BY total";

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Trier un résultat par ordre défini
    Par genova dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/09/2006, 23h50
  2. Réponses: 6
    Dernier message: 20/07/2006, 11h25
  3. Trier le résultat d'une commande dir?
    Par Johns dans le forum Langage
    Réponses: 6
    Dernier message: 13/03/2006, 17h24
  4. [MySQL] Trier les résultats résultant d'une BDD
    Par florent dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/12/2005, 20h22
  5. [TRIE] Trier un résultat selon certains termes
    Par narmataru dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 04/07/2005, 18h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo