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 :

Trie décroissant et ajouter un numéro [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Par défaut Trie décroissant et ajouter un numéro
    Bonjour à toutes et a tous,

    Je me permets de vous ecrire parce que je rencontre une diffculté dans la programmation de ma page Web en php.

    Dans un premier temps voici mes tables:

    Code autre : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE IF NOT EXISTS `joueurs` (
      `joueurs_id` int(10) NOT NULL AUTO_INCREMENT,
      `joueurs_lic` int(10) DEFAULT NULL,
      `joueurs_nom` varchar(50) DEFAULT NULL,
      `joueurs_prenom` varchar(50) DEFAULT NULL,
      `joueurs_adresse` varchar(1000) DEFAULT NULL,
      `joueurs_classement` int(50) DEFAULT NULL,
      PRIMARY KEY (`joueurs_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;

    Code autre : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE IF NOT EXISTS `inscription` (
      `inscription_id` int(10) NOT NULL AUTO_INCREMENT,
      `num_appariement` int(10) DEFAULT NULL,
      `tournois_id` int(10) DEFAULT NULL,
      `joueurs_id` int(10) DEFAULT NULL,
      PRIMARY KEY (`inscription_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

    Code autre : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE IF NOT EXISTS `tournois` (
      `tournois_id` int(10) NOT NULL AUTO_INCREMENT,
      `tournois_nom` varchar(50) DEFAULT NULL,
      `tournois_date_deb` datetime DEFAULT NULL,
      `tournois_date_fin` datetime DEFAULT NULL,
      `tournois_ronde` int(10) DEFAULT NULL,
      `tournois_lieu` varchar(50) DEFAULT NULL,
      `tournois_cloture` int(1) DEFAULT NULL,
      PRIMARY KEY (`tournois_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

    Je dois créer une page qui génére un numéro d'appariement.
    Je m'explique, une personne s'inscrit à un tournois.
    Une fois que le tounois est clos, je dois générer un numero d'appariement en fonction des personnes inscrites selon leur classement.
    Le classement doit fait par ordre decroissant
    La personne qui a le classement le plus elevé obtient 1.

    Si j'ai:

    Toto qui a un classement de 1500
    Zozo qui a un classement de 1000
    AAAA qui a un classement de 2850
    BBBB qui a un classement de 300

    Resultat que je cherche a obtenir:

    AAAA qui a un classement de 2850 obtient le n° 1
    Toto qui a un classement de 1500 obtient le n° 2
    Zozo qui a un classement de 1000 obtient le n° 3
    BBBB qui a un classement de 300 obtient le n° 4

    Concretement j'aimerai que ce chiffre 1 pour le joueur AAAA vienne se mettre dans la table inscription ainsi que pour tous les autres joueurs.

    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Qu'as tu déjà essayé ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Par défaut
    Je viens de modifier la table inscription:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE IF NOT EXISTS `inscription` ( 
    `inscription_id` int(10) NOT NULL AUTO_INCREMENT, 
    `num_appariement` int(10) DEFAULT NULL, 
    `tournois_id` int(10) DEFAULT NULL, 
    `joueurs_id` int(10) DEFAULT NULL, 
    `joueurs_classement` int(10) DEFAULT NULL, 
    PRIMARY KEY (`inscription_id`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
    Voici le code PHP ma ca mets pas le bon resultat dans num_appariement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $numero = 1; 
    $resultat = mysql_query("SELECT * FROM `inscription` where `tournois_id` =1 order by joueurs_classement DESC"); 
     
    while ($row = mysql_fetch_assoc($resultat)) 
    { 
    $numero++; 
    $resultat2 = mysql_query("UPDATE `inscription` SET `num_appariement` = '".$numero++."' where tournois_id=1;"); 
    }

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Le principe que tu adopte pour l'incrémentation ($numero) n'est pas correcte car la 1ère valeur sera 2 et non 1.

    2 chose une :
    - Soit tu l'initialise avec 0 ($numero = 0) juste avant la boucle, et tu l'incrémente avant la mise à jour (comme actuellement).
    - Soit tu l'initialise avec 1 (comme actuellement) mais tu l'incrémente après la mise à jour.

    Petite parenthèse.
    Dans la 2ème requête (la mise à jour), il n'est plus utile de rajouter à la clause WHERE la condition tournois_id=1 vu que les lignes répondent déjà à cette condition dans la 1ère requête.
    A coté de ça, et à titre personnel, j'aurais pris soin de rajouter dans la 1ère requête une jointure sur la table 'joueurs' et la table 'tournois', ceci dans le seul but d'éviter des lignes orphelines qu'il pourrait avoir (chose théoriquement impossible), donc par pure précaution.


    Par contre, à mon avis rajouter il faudrait rajouter une condition comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $resultat2 = mysql_query("UPDATE `inscription` SET `num_appariement` = '".$numero++."' where inscription_id = '".$row['inscription_id']."'");
    Sans cette condition, la mise à jour s'appliquera à TOUTES les lignes à chaque boucle.

    Une question me viens à l'esprit : Est ce qu'il est possible que 2 joueurs aient le même N° de num_appariement ?
    Ce qui sera potentiellement possible ici.
    Comme ça, au feeling, et si un N° num_appariement doit être unique pour chaque joueur, j'ai plutôt tendance à vouloir placer ce champ dans la table 'joueurs' (plutôt que inscription), avec une valeur NULL dans la cas où un joueur ne serait pas inscrit.


    En faite, et concernant cette table 'inscription' (qui me semble bizarre), il faudrait savoir si un joueur peut être inscrit 2 fois, comme avoir 2 N° d'inscription ?
    Dans le cas où il ne devrait jamais avoir 2 N° d'inscription pour 1 joueur, alors on peu se poser la question si cette table inscription est justifiée.


    C'était une petite réflexion comme ça

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Par défaut
    voici la solution ....

    <?
    include("connect.php");
    $numero = 1;
    $resultat = mysql_query("SELECT * FROM `inscription` where `tournois_id` = 1 order by joueurs_classement DESC");

    while ($row = mysql_fetch_assoc($resultat))
    {
    $resultat2 = mysql_query("UPDATE `inscription` SET `num_appariement` = '".$numero++."' where inscription_id=" . $row['inscription_id'] . ";");
    }
    $numero++;
    ?>

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    T'as fais une erreur, le $numero++ ce trouve en dehors de la boucle
    Comme ceci théoriquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $numero = 1;
    while ($row = mysql_fetch_assoc($resultat)) {
        $resultat2 = mysql_query("... bla bla bla ...");
        $numero++;
    }
    NB : Utilise le BBCode pour le code

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Par défaut
    pourtant ca marche sinon il me le fait de 2 en 2 ... je pige pas non plus.

  8. #8
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Citation Envoyé par jpkerloch
    pourtant ca marche sinon il me le fait de 2 en 2 ... je pige pas non plus.
    Normal, tu applique 2 fois l'incrémentation, la 1ère dans la requête.

    Fait comme ceci dans la requête (juste $numero) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultat2 = mysql_query("UPDATE `inscription` SET `num_appariement` = '".$numero."' where inscription_id=" . $row['inscription_id']);
    Et supprime le ; à la fin de la requête, ça ne sert à rien, ça peut même faire "planter" la requête

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Par défaut
    Merci mon bon monsieur

    <?
    include("connect.php");
    $numero = 1;
    $resultat = mysql_query("SELECT * FROM `inscription` where `tournois_id` = '".$_POST['tournois']."' order by joueurs_classement DESC");

    while ($row = mysql_fetch_assoc($resultat))
    {
    $resultat2 = mysql_query("UPDATE `inscription` SET `num_appariement` = '".$numero++."' where inscription_id=" . $row['inscription_id'] . ";");
    }
    ?>

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

Discussions similaires

  1. ajouter un numéro au nom du fichier
    Par nancy maman dans le forum Général Python
    Réponses: 9
    Dernier message: 12/04/2011, 09h11
  2. Ajout des numéros de sections aux légendes des figures
    Par xenemesis dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 4
    Dernier message: 13/10/2009, 16h18
  3. [Dates] Ajouter le numéro de la semaine
    Par Seta-san dans le forum Langage
    Réponses: 16
    Dernier message: 26/05/2009, 23h03
  4. Rerchercher derniére ligne écrite et y ajouter un numéro
    Par JPDU92 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 30/01/2008, 22h30
  5. Modifer un fichier en ajoutant le numéro de chaque ligne
    Par bellout dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 15/06/2006, 13h43

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