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 :

Comment connaître le numéro d'un enregistrement ?


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 37
    Points : 20
    Points
    20
    Par défaut Comment connaître le numéro d'un enregistrement ?
    Bonjour,

    J'aimerais savoir s'il existe une façon de connaître le numéro de ligne d'un enregistrement à l'issue d'une requête MySQL.

    Je m'explique avec un exemple :
    J'ai une table comportant les résultats de divers pronostics de joueurs. Je fais donc la somme avec une requête SQL des points marqués par chaque joueur et je trie ce résultat selon les points décroissants avec une requête de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT pseudo, sum(points) as pts FROM table GROUP BY pseudo ORDER BY pts DESC
    Maintenant voilà mon probléme : j'aimerais connaître la position de toto ainsi que son total de points à l'issue de cette requête ordonnée sans passer par une insertion du résultat de cette requête dans une table intermédiaire et avant d'effectuer l'affichage sur la page web.

    Es-ce possible en PHP via une fonction mysql_quelquechose où bien dois-je obligatoirement passer par une table intermédiaire ce qui me poserait des problémes en cas de consultation simultanée par plusieurs personnes...

  2. #2
    Membre expérimenté
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Points : 1 561
    Points
    1 561
    Par défaut
    Ta table n'a pas d'index incrémenté pour stocker tes pseudos ?
    Ex développeur Php / J2EE.
    Actuellement reconverti à SharePoint 2013

    Mon blog SP 2013

  3. #3
    Invité
    Invité(e)
    Par défaut
    salut miagiste

    vu que ton resultat de requete est ordonné par points desc, je pense qu'il te suffit simplement d'incrementer une variable dans ta boucle de mysql_fetch_array(), non ?
    du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $position = 0;
    while($ligne = mysql_fetch_array($res)) {
      $position++;
      echo $ligne['pseudo'].' est numéro '.$position;
    }

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    euh les pseudos sont stockés dans une autre table avec laquelle je fais une liaison car juste l'id est stocké dans la table des pronos

    ma requête SQL est juste là pour donner un exemple de ce que je fais mais elle est en réalité plus complexe avec les liaisons inter-tables pour avoir le pseudo.

    J'ai mis la requête pour vous donner un exemple de ce que je récupére (dans ce cas le pseudo et le total de points).

    Mais je veux pas connaître l'id du joueur mais son classement à l'issue de la requête.

    Ainsi si on a dans la table (pour simplifier)

    pseudo -- pts
    toto - 4
    toto - 5
    lulu - 8
    lulu - 10
    jip - 1
    jip - 3

    le résultat de ma requête donnera
    lulu - 18
    toto - 9
    jip - 4

    or bien entendu avec plus de 1000 pseudos et plus de 10 pronos par pseudo, c'est plus complexe. Donc serait-il possible avant l'affichage de connaître la position d'un pseudo donné dans le résultat de la requête, voilà la question

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par torvalds17
    salut miagiste

    vu que ton resultat de requete est ordonné par points desc, je pense qu'il te suffit simplement d'incrementer une variable dans ta boucle de mysql_fetch_array(), non ?
    du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $position = 0;
    while($ligne = mysql_fetch_array($res)) {
      $position++;
      echo $ligne['pseudo'].' est numéro '.$position;
    }
    C'est la solution qui permet de connaître la position au MOMENT de l'affichage.

    Or je voudrais le connaître AVANT l'affichage et si possible avant traitement avec le traditionnel mysql_fetch_array().

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    pourquoi ne pa avoir une colonne dans ta table avec classement?
    Stay in Bed .. Save Energy

  7. #7
    Invité
    Invité(e)
    Par défaut
    tu ne peux pas voir ce qu'il y a dans un resultset sans le parcourir à l'aide d'un fetch, donc tu ne peux pas "rechercher" du contenu dans une ligne quelconque du resultset.

    l'ideal serait d'etre équipé de mysql5 et de faire une vue qui fait ton calcul automatiquement.
    si tu n'as pas mysql5, je pense que le plus facile c'est de parcourir ton resultset, de stocker ses valeurs dans des variables (un tableau devrait faire l'affaire), de faire tes traitements pré-affichage, et d'afficher seulement apres...

  8. #8
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    je ne comprends pas trop ton intérêt pour avoir le classement avant affichage?
    tu peux expliquer ce que tu veux faire concrètement STP parce que je ne vois pas ce que ça peut t'apporter de connaître le classement avant affichage?

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par boo64
    pourquoi ne pa avoir une colonne dans ta table avec classement?
    ca m'oblige alors à parcourir l'ensemble des résultats pour trouver celui qui correspond au cherché

    J'aurais voulu éviter cela si c'était possible

    lors d'une requête SQL avec PHP, je retourne un enregistrement possédant X rangées. On peut connaître ce nombre de rangées avant d'effectuer le parcours via la fonction mysql_num_rows()

    J'aimerais que ma recherche se fasse de la même façon (en évitant le parcours de l'enregistrement) via un paramétre de recherche qui serait dans mon cas le pseudo...

    Voilà en gros ce que je cherche à voir si c'est possible

  10. #10
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    lors d'une requête SQL avec PHP, je retourne un enregistrement possédant X rangées. On peut connaître ce nombre de rangées avant d'effectuer le parcours via la fonction mysql_num_rows()
    je pense qu'il y a confusion : mysql_num_rows() te permet de connaître le nombre d'enregistrements retournés par ta requête mais en aucune façon de connaître le nombre de "rangées". Le nombre de rangées est déterminé par la clause SELECT de ta requête.
    Donc résultat des courses , tu mets tes enregistrements dans un tableau et tu travailles sur ce tableau (où tu peux faire ta recherche par pseudo)

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par gerald2545
    je pense qu'il y a confusion : mysql_num_rows() te permet de connaître le nombre d'enregistrements retournés par ta requête mais en aucune façon de connaître le nombre de "rangées". Le nombre de rangées est déterminé par la clause SELECT de ta requête.
    Donc résultat des courses , tu mets tes enregistrements dans un tableau et tu travailles sur ce tableau (où tu peux faire ta recherche par pseudo)
    Je me suis mal exprimé mais pour moi le nombre de rangées et le nombre d'enregistrement c'était la même chose dans ma tête c'est à dire le nombre de "retours" effectués par la requête.

    En gros, dans mon appli, j'affiche quoiqu'il arrive les 30 premiers du classement puis si le gars connecté qui demande le classement n'est pas dans les 30 premiers, j'affiche le gars juste avant lui, son classement et le gars juste aprés lui.
    J'aimerais éviter d'avoir à parcourir le tout vu le nombre possible de joueur et ainsi utiliser la fonction mysql_field_seek() pour se placer directement sur le joueur précédant mon gars sans avoir à parcourir l'ensemble des résultats...

    Si je mets le résultat de ma requête dans un tableau intermédiaire, je parcours tous les résultats donc tant qu'à faire autant utiliser mysql_fetch_array et avec un test sur le pseudo afficher quand le pseudo se présente... Mais ca m'oblige à parcourir et je perds en performance (certes minime mais d'où le but de trouver une "parade" à ce parcours si toutefois cette parade existe d'où ma question)

    Mais j'ai bien l'impression que cette "parade" n'existe pas

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    en effet me semble pas quelle existe mais si tu as une colonne classement tu peux recupéré juste le classement du pseudo si les dans les 30 premiers taffiche sinon taffiche celui justa avan lui et celui apré..

    moi je ferais comme ca apré je ne c pa si c plus optimisé ou pas que de tous faire dans un tableau

    bon courage
    Stay in Bed .. Save Energy

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/10/2013, 22h47
  2. [Batch] Comment connaître quel numéro d'errorlevel correspond a quoi ?
    Par NorocBzh dans le forum Scripts/Batch
    Réponses: 9
    Dernier message: 21/05/2010, 11h28
  3. Comment connaître le dernier enregistrement d'une table?
    Par THOMAS Patrice dans le forum SQL
    Réponses: 6
    Dernier message: 11/05/2010, 12h53
  4. Réponses: 12
    Dernier message: 02/08/2009, 13h18
  5. Comment connaître le nom de l'ordinateur ?
    Par M.Dlb dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 30/08/2003, 23h03

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