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

PHP & Base de données Discussion :

Classement [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 3
    Par défaut Classement
    Bonjour à tous,

    Voila je vous expose mon problème, en espérant être le plus clair possible.
    J'ai créé un classement qui utilise la table résultat :


    en utillisant ce code :

    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
    <?php
     
    $reponse = "SELECT pilote, sum(point) AS total, nationalite, ecurie, moteur from resultat where annee='$an' group by pilote order by total DESC";
    $req = mysql_query($reponse) or die(mysql_error());
     
    echo "<h2><a href=\"#\">Classement Pilotes : $an</a></h2>";
    ?>
    <div class="articles"><table width=100%>
    <tr align=center>
      <td align=center width=5%><h4><strong>Rg</strong></h4></td>
      <td align=center width=40%><h4><strong>Pilote</strong></h4></td>
      <td align=center width=10%><h4><strong>Nationalit&eacute;</strong></h4></td>
      <td align=center width=30%><h4><strong>Ecurie - Moteur</strong></h4></td>
      <td align=center width=30%><h4><strong>Points</strong></h4></td>
    </tr>
    <?php
     
    $i=1;
     
    while ($donnees=mysql_fetch_array($req) )
    {
        echo "<tr align=center>
      <td align=center width=5%>$i</td>
      <td align=center width=40%><a href=\"pilote_carriere.php?nom=$donnees[pilote]\">$donnees[pilote]</a></td>
      <td align=center width=10%><img valign=middle src='images/$donnees[nationalite].png' border='1' align='absmiddle' width=35 height=35 /></td>
      <td align=center width=30%><a href=\"ecurie_detail.php?ecurie=$donnees[ecurie]\">$donnees[ecurie]</a> - $donnees[moteur]</td>
      <td align=center width=30%>$donnees[total]</td>";
      $i++;
    }
    ?>
    </tr></table>
    </div>
    ce qui me donne ceci :



    Maintenant, j'ai créé une page qui regroupe tout les résultats d'un même pilote en les classant par année avec ce code :

    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
    <?php
     
    $nom1=$_GET['nom'];
    $nom = str_replace('_', ' ', $nom1);
     
    $reponse = "SELECT count(gp) AS nbre, sum(point) AS total, pilote, annee, ecurie, moteur from resultat where pilote='$nom' group by annee order by annee DESC";
    $req = mysql_query($reponse) or die(mysql_error());
     
    ?>
    <div class="articles"><table width=100%>
     
    <tr align=center>
      <td align=center width=12%><h4>Année</h4></td>
      <td align=center width=12%><h4>GP</h4></td>
      <td align=center width=16%><h4>Point</h4></td>
      <td align=center width=20%><h4>Ecurie</h4></td>
      <td align=center width=20%><h4>Moteur</h4></td>
      <td align=center width=16%><h4>Classement</h4></td>
     
      </tr>
    <?php
    while ($donnees=mysql_fetch_array($req) )
    {
    $var = str_replace(' ', '_', $donnees['pilote']);
        echo "<tr align=center>
      <td align=center width=16%><a href=\"pilote_saison.php?nom=$var&annee=$donnees[annee]\">$donnees[annee]</a></td>
      <td align=center width=16%>$donnees[nbre]</td>
      <td align=center width=16%>$donnees[total]</td>
      <td align=center width=16%><a href=\"ecurie_detail.php?ecurie=$donnees[ecurie]\">$donnees[ecurie]</a></td>
      <td align=center width=16%>$donnees[moteur]</td>
      <td align=center width=16%></td>";
    }
    ?>
    Voila le résultat :



    J'en arrive donc à ma question :

    Comment faire pour remplir les cases classement qui reste vide sur la dernière image en récupérant le rang des pilotes provenant du classement pilote ?

    Si quelqu'un peut m'éclairer avant que mes voisins portent plainte pour tapage nocturne et diurne à force de me claquer la tête contre les murs depuis deux jours.
    Cela serait fort appréciable pour eux et pour ma tête .

  2. #2
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    tu remarqueras que pour ta 1re photo d'écran, le classement est calculé en PHP avec la variable $i et non en MySQL (d'ailleurs tu n'as pas géré le cas des ex-æquo, Jarno Trulli devrait aussi être 8e)
    donc tu ne peux pas retrouver se classement dans la 2e page sans tout recalculer en PHP

    pour éviter tous ces calculs à chaque affichage, tu pourrais par exemple rajouter une colonne dans la table où tu stockerais le classement calculé

  3. #3
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,
    Tu peux calculer le classement dans la requête Sql et le classer avec order by.
    http://sqlpro.developpez.com/cours/sqlaz/select/

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 3
    Par défaut
    Citation Envoyé par nosferapti Voir le message
    tu remarqueras que pour ta 1re photo d'écran, le classement est calculé en PHP avec la variable $i et non en MySQL (d'ailleurs tu n'as pas géré le cas des ex-æquo, Jarno Trulli devrait aussi être 8e)
    donc tu ne peux pas retrouver se classement dans la 2e page sans tout recalculer en PHP

    pour éviter tous ces calculs à chaque affichage, tu pourrais par exemple rajouter une colonne dans la table où tu stockerais le classement calculé
    Merci pour l'aiguillage, j'ai donc stocké les résultats dans une table afin de calculé le classement par mysql. Cela fonctionne du tonnerre.

    Mais car il y a un mais (bien sûr), mon soucie vient maintenant des ex-æquo. Trulli et Alonso sont tout les deux 8ème mais par contre le suivant Rosberg devrait être 10ème vu qu'il y a deux 8ème. il se retrouve 9ème.

    voici la requête utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT (SELECT COUNT(DISTINCT b.point) FROM test AS b WHERE b.point >= a.point AND annee=$donnees[annee]) AS position
    FROM test AS a WHERE a.nom = '$donnees[nom]' AND annee=$donnees[annee] ORDER BY point DESC
    Comment faire pour sauter la place des ex-æquo ?

    Par avance merci pour votre aide.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 3
    Par défaut
    J'ai trouvé la solution.
    Dans le code ci dessus, le distinct était de trop.


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

Discussions similaires

  1. Impossible de résoudre le classement en conflit de l'opérati
    Par jdeboer dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/09/2011, 18h53
  2. [CR XI] Calcul d'un classement/rang
    Par silversatch62 dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 06/08/2009, 11h29
  3. Classement membre sur 1 an
    Par kileak dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 24/10/2005, 15h45
  4. Classement dynamique
    Par El Jaguar dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/08/2005, 14h33
  5. Classement daté
    Par Gzip dans le forum Linux
    Réponses: 7
    Dernier message: 26/04/2004, 22h56

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