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 :

Afficher le rang de l'utilisateur par rapport à ses points [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 23
    Par défaut Afficher le rang de l'utilisateur par rapport à ses points
    Bonjour,

    J'aimerais à l'aide d'une requête afficher le rang de l'utilisateur en fonction de ses points gagnés par rapport aux autres utilisateurs.

    Voici le code que j'ai commencé à rentrer :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
     
    $totalpoints = db_query('SELECT MAX(max_points) FROM {userpoints_total} WHERE uid = :uid', array(":uid"=>$elements['#account']->uid))->fetchField();
     
    print $totalpoints;
     
     ?>

    Comme vous pouvez le remarquer ce code est utiliser pour chercher des infos sur une bdd reliée à Drupal 7. Cela me permet d'afficher le total des points de l'utilisateur, mais j'aimerais afficher en plus le rang où se situe la personne. Par exemple si une personne détient le plus grand nombre de points, cela affichera : "Classement général : 1 / 80".

    Le "80" représente ici le nombre total d'utilisateurs.

    Merci d'avance pour votre aide !

  2. #2
    Membre éclairé Avatar de EIN-LESER
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 703
    Par défaut
    Ne connaissant pas Drupal 7 je ne me risquerais pas mais personnellement je l'aurais fait avec la requete + un boucle en PHP.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 23
    Par défaut
    Salut,

    Est-ce que tu pourrais me guider un peu plus concernant ton idée ? comment je dois construire ma requête ? il n'est pas possible d'utiliser deux SELECT dans une requête ? l'une pour chercher le total des points et l'autre pour le numéro de la ligne correspondant à l'utilisateur ?

  4. #4
    Membre éclairé Avatar de EIN-LESER
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 703
    Par défaut
    Avant tout il faudrait que tu nous montre la structure de ta base.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 23
    Par défaut
    Salut,

    J'utilise une base de données MySQL, voici la structure de la table concernée :


    Nom de la table userpoints_total

    Elle contient 4 colonnnes : uid - points - max_points - last_update

  6. #6
    Membre éclairé Avatar de EIN-LESER
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 703
    Par défaut
    donc teoriquement il te suffit de recuperer tous les uid dont les points sont supperieurs au nb de point de l'user et de compter le nombre de resultats pourt avoir ta position.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(*) from userpoints_total where  points > %d

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 23
    Par défaut
    Comment faire pour compter le nombre résultats pour afficher la position ?
    Admettons qu'il y a 10 résultats pour le membre Y. Cela voudrait dire qu'il est à la position 11. Comment faire pour en arriver à cette position ?

    la requête sera construite comme cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    <?php
    $position = db_query('SELECT count(*) FROM {userpoints_total} WHERE max_points > uid AND uid = :uid', array(":uid"=>$elements['#account']->uid))->fetchField();
     
    print $position; ?>

  8. #8
    Membre éclairé Avatar de EIN-LESER
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 703
    Par défaut
    $position contient le nombre d'entrees qui on plus de points que ton user y

    donc ta position c'est $position+=1;

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 23
    Par défaut
    j'ai utilisé la requête que j'ai montré précédemment, et cela m'affiche le numéro 1 chez tous les utilisateurs.

    j'ai ensuite voulu tester le "count" avec ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    $position = db_query("SELECT count(*) FROM {userpoints_total} WHERE max_points > 1400");
    print $position; ?>
    Et ça ne m'affiche rien alors que j'ai deux membres qui ont 1466 et 4230 points J'ai l'impression que le count (*) ne fonctionne pas.

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 23
    Par défaut
    J'ai rajouté le $position+=1; mais cela m'affiche cette fois "2" pour chaque membre.

  11. #11
    Membre éclairé Avatar de EIN-LESER
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 703
    Par défaut
    Liée a Drupal 7?
    a vérifier.
    Mais même dans ce cas il doit exister une fonction analogue.

  12. #12
    Membre éclairé Avatar de EIN-LESER
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 703
    Par défaut
    exemple de code pour compte sous dupral7 trouvé sur le net:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
     
    $querystring = db_select('table1')
    ->fields('users')
    ->execute()
    ->rowCount();
     
    ?>

  13. #13
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 23
    Par défaut
    ce qui est bizarre c'est que j'utilise déjà un count pour une autre requête, et cela fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
     
    $films_notes = db_query("SELECT COUNT(uid) FROM {votingapi_vote} WHERE tag= :tag AND  uid =:uid", array(":tag"=>'note',":uid"=>$elements['#account']->uid))->fetchField();
    print $films_notes; 
     
    ?>
    Je comprend pas pourquoi là ça fonctionne et pas sur l'autre :s

  14. #14
    Membre éclairé Avatar de EIN-LESER
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 703
    Par défaut
    Comme dit je ne m'y connais pas du tout en dupral7.
    Sorry.
    Pour le reste ça devrait fonctionner mais a condition de régler ton soucis de count(*)

  15. #15
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 23
    Par défaut
    Re,

    J'ai testé le code que tu m'as envoyé pour afficher le nombre de membre qui ont plus de 1400 points, et cela m'affiche bien 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
     
    $querystring = db_select('userpoints_total')
    ->fields('userpoints_total')
    ->condition('max_points', 1400,'>')
    ->execute()
    ->rowCount();
     print $querystring;
    ?>

    Par contre, je galère toujours pour afficher en fonction de "uid", j'ai essayé ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
     
    $querystring = db_select('userpoints_total')
    ->fields('userpoints_total')
    ->condition('max_points', 'uid,'>')
    ->condition ('uid', $elements['#account']->uid,'=')
    ->execute()
    ->rowCount();
     print $querystring;
    ?>
    mais j'obtiens toujours un "1" :s

  16. #16
    Membre éclairé Avatar de EIN-LESER
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 703
    Par défaut
    Avec 2 requetes?
    1 tu fais une requete pour recuperer les points d'un user
    2 tu remets ton code avec comme variable celle qui contiens le nombre de points de l'user.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
     
    $querystring = db_select('userpoints_total')
    ->fields('userpoints_total')
    ->condition('max_points', $mavariable,'>')
    ->execute()
    ->rowCount();
     print $querystring;
    ?>

  17. #17
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 23
    Par défaut
    énorme ça fonctionne ! j'avais pas pensé à ça :s

    Merci beaucoup de m'avoir aidé

  18. #18
    Membre éclairé Avatar de EIN-LESER
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 703
    Par défaut
    On est la pour ça
    Avec plaisir.

    N'oublis pas le bouton résolu

  19. #19
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Sinon si le but est d'afficher un classement en rapport avec des points , quelque chose comme ça devrait faire l'affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT a.uid, ( COUNT(b.uid) + 1 ) as position, a.max_points FROM userpoints_total AS a LEFT JOIN userpoints_total AS b ON a.max_points < b.max_points GROUP BY a.uid ORDER BY position
    En gros pour chaque utilisateur on compte ceux qui on un meilleure score qu'eux.

    Suffit de rajouter un Where en fin de requête si tu le rang d'un utilisateur particulié

    http://blog.plumbr.com/19-calculer-d...ssement-en-sql
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [Débutant] Centrer un texte par rapport à un point.
    Par pyngux dans le forum C#
    Réponses: 3
    Dernier message: 22/05/2014, 11h49
  2. [Turbo Pascal] Coupe de football : afficher le 1er et le 2ème par rapport aux points
    Par jombo dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 29/03/2012, 13h54
  3. div parent au premier plan par rapport à ses fils?
    Par hamidap dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 27/03/2009, 16h05
  4. afficher la valeur d un champ par rapport a un dblook?
    Par neuneu1 dans le forum Bases de données
    Réponses: 3
    Dernier message: 27/04/2007, 13h12
  5. rotation par rapport à un point
    Par marcololo dans le forum DirectX
    Réponses: 8
    Dernier message: 03/06/2005, 15h36

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