[RESOLU]Trouver la position(rang) d'un joueur dans une table SCORE ?

Eléphant du PHP | 58 Messages

14 févr. 2008, 10:42

J'arrive enfin dans l'anti chambre du savoir PHP; Mon coeur bat au plus fort sachant que je vais rencontrer les maitres du savoir suprême... mon pouls s'accélère à l'idée que je vais braver la colère des sages qui vont me fustiger d'un "as tu fait des recherches dans les autres sections avant de poster" ou d'un "Google est ton ami".... mais n'écoutant que mon courage je me lance!.... lol!

Bon! allons y :

J'ai une table SCORE avec PSEUDO et POINTS et 1000 enregistrements.

Je veux faire une recherche sur un PSEUDO et afficher sa position dans les scores avec les 30 scores au dessus et les 30 en dessous.....bref ! je veux afficher un tableau avec 61 scores avec la position des joueurs parmi les 1000 joueurs dont celui du PSEUDO recherché au milieu.

avec 3 scores à afficher, cela donnerait :


65 - Ernestine - 65420 points
66 - Grégoire - 61000 points
66 - Barnabé - 38500 points

Donc deux questions :

1) Comment trouver le rang du pseudo que je recherche sachant qu'il n'y a pas de champ RANG et que j'obtiens la position uniquement pas un tri sur les scores.

2) Comment afficher 30 enregistrements AVANT cette position et 30 après, toujours pareil en sachant que le rang déterminé à la question précédente ne me permet pas de pointer directement un enregistrement?

Merci à vous ô grands maitres du savoir....

:wink:
Modifié en dernier par speccy666 le 06 mars 2008, 20:14, modifié 1 fois.

ViPHP
ViPHP | 4039 Messages

14 févr. 2008, 10:56

*entra un petit gobelin blanc, un cure-dents a la main, et un casque jaune sur la tête*

bien.. si je comprends bien (je traduits, parce que le gobelin, c'est pas compréhensible), dans ta table score, tu as un champ pseudo et un champ points.. il est possible d'avoir le schéma de la table ? (le section create table lorsque tu fais un export dans phpmyadmin). Et quelques valeurs aussi, histoire de tester les requêtes.

D'ailleurs, il me semble qu'on se trouve a la mauvaise auberg.. au mauvais forum, ça a plutôt lieu d'être au forum sql.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 févr. 2008, 11:12

Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "SQL & Bases de données".

PS : rien que pour l'intro qui m'a bien sourire, je ne me fâcherais pas tout rouge :lol:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

14 févr. 2008, 13:40

Tu arrives au boss du 1er niveau :axe:

Ayant posté dans le mauvais forum tu n'as pas pu voir les rappel :
1. poster le schéma des tables pertinentes à votre requête sous la forme d'une instruction "CREATE TABLE" (fonction "Exporter" de phpMyAdmin)
2. si nécessaire, poster un échantillon des données sous la forme d'une instruction "INSERT INTO"

Bats toi vaillamment ou meurs dans la souffrance

:lol:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 58 Messages

14 févr. 2008, 17:23

Ah ben désolé! comme je met tout cela entre deux balises PHP, c'était pour moi du PHP... :lol:
:oops:

Ben sinon j'ai une table de score opérationnelle bien plus compliquée avec une dizaine de champs donc je pensais que mon exemple était assez clair non?

Bon sinon je vous poste tout cela....; c'est si compliqué que ça ma demande pour des OrkMasters de votre catégorie qui déchiquetez un dragon doré d'un seul coup de dent???

Honorable Zeus! que ta foudre me soit épargnée...et que ma descendance soit impuissante sur trois générations...( mais pas moi! hein!!...ah ben ça non alors!...)
-- phpMyAdmin SQL Dump
-- version 2.10.1
-- http://www.phpmyadmin.net
-- 
-- Serveur: localhost
-- Généré le : Jeu 14 Février 2008 à 16:21
-- Version du serveur: 5.0.41
-- Version de PHP: 5.2.3

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

-- 
-- Base de données: `questar`
-- 

-- --------------------------------------------------------

-- 
-- Structure de la table `scores`
-- 

CREATE TABLE `scores` (
  `PSEUDO` varchar(12) NOT NULL,
  `LASTPOS` smallint(5) unsigned NOT NULL,
  `POSACTUELLE` smallint(5) unsigned NOT NULL,
  `SCOREMOIS` smallint(5) unsigned NOT NULL,
  `SCOREMOISPOURCENT` smallint(5) unsigned NOT NULL,
  `BESTSCOREMOIS` smallint(5) unsigned NOT NULL,
  `BESTSCOREMOISPOURCENT` smallint(5) unsigned NOT NULL,
  `PLANETE` varchar(8) NOT NULL,
  `SCOREPLANETE` smallint(5) unsigned NOT NULL,
  `BESTPLANETEEVER` varchar(8) NOT NULL,
  `BESTSCOREPLANETEEVER` smallint(5) unsigned NOT NULL,
  PRIMARY KEY  (`SCOREMOIS`),
  KEY `PSEUDO` (`PSEUDO`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- 
-- Contenu de la table `scores`
-- 

INSERT INTO `scores` (`PSEUDO`, `LASTPOS`, `POSACTUELLE`, `SCOREMOIS`, `SCOREMOISPOURCENT`, `BESTSCOREMOIS`, `BESTSCOREMOISPOURCENT`, `PLANETE`, `SCOREPLANETE`, `BESTPLANETEEVER`, `BESTSCOREPLANETEEVER`) VALUES 
('nathalie994', 1, 10, 12079, 40, 0, 39, '', 0, '', 65535),
('Grégoire782', 112, 121, 12211, 58, 0, 71, 'La terre', 0, 'La terre', 65535),
('Bastien655', 29, 38, 12357, 57, 0, 59, 'Jupiter', 0, 'Jupiter', 52104),
('Chrystèle822', 62, 67, 12552, 49, 0, 67, '', 0, '', 52205),
('nathalie244', 86, 93, 12622, 71, 0, 78, 'Jupiter', 0, 'Jupiter', 57783),
('Grégoire636', 89, 92, 13022, 81, 0, 82, '', 0, '', 65535),
('Ernest885', 199, 206, 13731, 83, 0, 42, '', 0, '', 51905),
('géraldine544', 51, 54, 14175, 71, 0, 41, 'Vénus', 0, 'Vénus', 65535),
('alev754', 105, 106, 16382, 31, 0, 85, '', 0, '', 58902),
('nathalie342', 10, 11, 16981, 45, 0, 63, 'Mars', 0, 'Mars', 65017),
('mitch', 7, 7, 17083, 81, 54233, 49, 'saturne', 33568, '', 0),
('Jean-Charles', 106, 116, 17552, 39, 0, 71, '', 0, '', 65535),
('Bastien839', 29, 37, 18401, 50, 0, 40, 'Mercure', 0, 'Mercure', 65535),
('alice', 5, 8, 18568, 76, 0, 0, '', 0, '', 0),
('Jean-Charles', 32, 41, 18896, 66, 0, 72, 'Pluton', 0, 'Pluton', 43747),
('alex623', 12, 17, 19033, 39, 0, 70, '', 0, '', 65535),
('Chrystèle593', 191, 201, 19362, 85, 0, 63, '', 0, '', 65535),
('Virginie464', 131, 137, 19674, 55, 0, 30, '', 0, '', 65535),
('Grégoire816', 103, 105, 21737, 52, 0, 40, '', 0, '', 65535),
('Barnabé547', 102, 106, 22026, 73, 0, 62, '', 0, '', 44697),
('Grégoire278', 77, 78, 22149, 65, 0, 46, '', 0, '', 62815),
('Bastien349', 48, 51, 22160, 69, 0, 48, '', 0, '', 53287),
('alev596', 181, 183, 23037, 41, 0, 45, 'La terre', 0, 'La terre', 65535),
('Grégoire507', 71, 76, 23690, 61, 0, 67, '', 0, '', 56154),
('Chrystèle703', 173, 181, 23890, 66, 0, 39, '', 0, '', 62469),
('Ernestine238', 70, 77, 23979, 82, 0, 30, '', 0, '', 54143),
('Annabelle561', 55, 65, 24033, 29, 0, 74, 'Uranus', 0, 'Uranus', 62831),
('Virginie26', 182, 189, 24111, 42, 0, 63, '', 0, '', 58438),
('alex537', 16, 21, 24113, 78, 0, 75, 'Uranus', 0, 'Uranus', 45806),
('Jean-Charles', 90, 92, 25110, 65, 0, 44, '', 0, '', 65535),
('nathalie734', 113, 123, 25565, 57, 0, 46, '', 0, '', 65535),
('Ernestine58', 98, 101, 25619, 63, 0, 31, '', 0, '', 48338),
('Antoine985', 174, 177, 25941, 59, 0, 47, 'Mars', 0, 'Mars', 65535),
('speccy', 1, 3, 26898, 75, 59356, 79, 'jupiter', 36532, 'neptune', 56856),
('géraldine427', 33, 34, 27184, 66, 0, 56, 'Saturne', 0, 'Saturne', 65535),
('Bastien605', 195, 204, 28049, 35, 0, 51, '', 0, '', 59457),
('alfred', 6, 6, 28100, 74, 0, 0, '', 0, '', 0),
('Ernestine533', 48, 50, 28204, 61, 0, 29, '', 0, '', 65535),
('Grégoire320', 184, 192, 28503, 50, 0, 41, '', 0, '', 65535),
('Virginie728', 174, 175, 28571, 36, 0, 40, 'Jupiter', 0, 'Jupiter', 42922),
('Annabelle637', 111, 116, 29558, 56, 0, 79, '', 0, '', 65535),
('Bastien351', 123, 133, 30178, 41, 0, 48, 'Vénus', 0, 'Vénus', 57064),
('Chrystèle82', 99, 105, 30300, 33, 0, 32, '', 0, '', 65535),
('Barnabé743', 127, 133, 30578, 51, 0, 52, '', 0, '', 65535),
('Ernestine939', 5, 9, 30611, 85, 0, 45, 'Neptune', 0, 'Neptune', 51874),
('nathalie63', 183, 189, 31132, 86, 0, 34, 'Mars', 0, 'Mars', 65535),
('Annabelle991', 36, 46, 31287, 53, 0, 70, 'Pluton', 0, 'Pluton', 41961),
('alex66', 2, 4, 33174, 60, 0, 0, '', 0, '', 0),
('Antoine542', 63, 72, 33217, 55, 0, 35, '', 0, '', 56973),
('alex682', 4, 7, 33240, 62, 0, 39, 'Pluton', 0, 'Pluton', 65535),
('alev55', 68, 71, 34305, 36, 0, 66, '', 0, '', 62296),
('géraldine37', 129, 137, 34970, 59, 0, 30, '', 0, '', 65535),
('Bastien696', 181, 184, 35414, 47, 0, 30, 'Saturne', 0, 'Saturne', 65535),
('Chrystèle525', 18, 22, 35719, 86, 0, 78, 'Mars', 0, 'Mars', 60549),
('Annabelle70', 21, 29, 36311, 50, 0, 78, '', 0, '', 65535),
('alex657', 126, 134, 36911, 64, 0, 55, 'Mars', 0, 'Mars', 65535),
('Annabelle762', 165, 170, 38097, 30, 0, 67, '', 0, '', 65535),
('Ernestine29', 14, 18, 38142, 68, 0, 62, '', 0, '', 65535),
('alev619', 71, 74, 38407, 81, 0, 81, '', 0, '', 58129),
('Virginie618', 95, 103, 38574, 52, 0, 60, '', 0, '', 55517),
('Bastien670', 126, 131, 39251, 79, 0, 85, 'Vénus', 0, 'Vénus', 65535),
('Barnabé384', 138, 148, 39871, 65, 0, 54, '', 0, '', 65535),
('nouveau', 4, 5, 40189, 37, 0, 0, '', 0, '', 0),
('Bastien507', 117, 119, 40393, 66, 0, 42, 'Pluton', 0, 'Pluton', 59374),
('alev913', 73, 77, 42799, 31, 0, 59, 'La terre', 0, 'La terre', 40120),
('tiny', 3, 3, 43063, 48, 0, 0, '', 0, '', 0),
('Antoine805', 194, 196, 43152, 84, 0, 56, 'Jupiter', 0, 'Jupiter', 40439),
('Jean-Charles', 97, 101, 44040, 61, 0, 56, '', 0, '', 65535),
('Barnabé535', 46, 54, 44574, 65, 0, 46, 'Uranus', 0, 'Uranus', 51231),
('alev533', 94, 104, 44907, 66, 0, 64, '', 0, '', 43796),
('alev31', 89, 91, 46160, 40, 0, 62, 'Mars', 0, 'Mars', 65535),
('nathalie333', 157, 164, 47335, 61, 0, 72, '', 0, '', 62515),
('Bastien600', 55, 61, 47424, 78, 0, 62, 'Uranus', 0, 'Uranus', 62213),
('Ernest725', 9, 12, 47779, 49, 0, 72, '', 0, '', 65535),
('Bastien527', 155, 156, 47913, 45, 0, 57, '', 0, '', 48428),
('POLLUX581', 139, 145, 48256, 72, 0, 65, 'Jupiter', 0, 'Jupiter', 65535),
('Grégoire580', 142, 152, 48848, 36, 0, 64, '', 0, '', 57327),
('Ernestine632', 171, 173, 48933, 40, 0, 31, 'Mars', 0, 'Mars', 40320),
('Chrystèle794', 123, 130, 49962, 61, 0, 53, 'Uranus', 0, 'Uranus', 40966),
('géraldine488', 127, 132, 50169, 56, 0, 62, 'Mars', 0, 'Mars', 58036),
('alex933', 111, 113, 50319, 69, 0, 74, '', 0, '', 65535),
('Chrystèle368', 193, 201, 50559, 39, 0, 77, 'La terre', 0, 'La terre', 65535),
('Annabelle504', 30, 35, 51250, 47, 0, 57, '', 0, '', 65535),
('Virginie882', 199, 202, 51647, 79, 0, 49, 'Jupiter', 0, 'Jupiter', 46690),
('Antoine895', 57, 64, 51816, 86, 0, 40, '', 0, '', 65535),
('alev359', 183, 187, 51893, 40, 0, 29, '', 0, '', 65535),
('Ernestine752', 163, 168, 52126, 79, 0, 54, '', 0, '', 65535),
('Ernestine89', 182, 188, 52183, 61, 0, 52, '', 0, '', 51440),
('Ernest678', 63, 73, 52615, 46, 0, 49, '', 0, '', 65535),
('Antoine339', 68, 72, 52725, 34, 0, 32, 'Saturne', 0, 'Saturne', 65535),
('POLLUX70', 66, 72, 53014, 55, 0, 54, '', 0, '', 65535),
('alev711', 155, 165, 53957, 37, 0, 38, 'Neptune', 0, 'Neptune', 65535),
('alex638', 32, 42, 54279, 33, 0, 54, '', 0, '', 65535),
('Chrystèle479', 151, 161, 54920, 49, 0, 74, '', 0, '', 51686),
('Annabelle675', 53, 57, 55120, 54, 0, 46, '', 0, '', 60795),
('Jean-Charles', 39, 40, 56248, 60, 0, 49, '', 0, '', 65535),
('Virginie298', 3, 6, 56727, 59, 0, 54, '', 0, '', 41776),
('Ernestine633', 70, 75, 57117, 42, 0, 69, 'La terre', 0, 'La terre', 45043),
('Bastien292', 121, 122, 57561, 30, 0, 69, '', 0, '', 65535),
('Ernest346', 105, 111, 57904, 57, 0, 76, 'Pluton', 0, 'Pluton', 65535),
('Bastien38', 50, 53, 59690, 36, 0, 65, 'Uranus', 0, 'Uranus', 65535),
('Annabelle966', 126, 128, 60012, 33, 0, 80, '', 0, '', 60339),
('Bastien360', 82, 89, 60078, 42, 0, 67, '', 0, '', 44907),
('Jean-Charles', 126, 132, 60109, 40, 0, 49, '', 0, '', 57191),
('Virginie485', 13, 21, 60266, 43, 0, 38, 'Mars', 0, 'Mars', 65535),
('alex286', 183, 185, 60567, 68, 0, 62, '', 0, '', 65535),
('nathalie196', 96, 106, 61387, 58, 0, 63, 'Neptune', 0, 'Neptune', 44422),
('Grégoire392', 198, 201, 61587, 63, 0, 36, 'Neptune', 0, 'Neptune', 42519),
('Annabelle106', 10, 18, 62207, 48, 0, 63, 'Vénus', 0, 'Vénus', 65535),
('Ernestine570', 137, 142, 62285, 61, 0, 52, 'Neptune', 0, 'Neptune', 65535),
('Jean-Charles', 151, 161, 62423, 70, 0, 62, '', 0, '', 50530),
('POLLUX159', 18, 27, 62717, 46, 0, 50, 'Saturne', 0, 'Saturne', 64133),
('Bastien548', 69, 76, 63450, 55, 0, 72, 'Neptune', 0, 'Neptune', 63732),
('Bastien477', 122, 123, 63605, 81, 0, 50, '', 0, '', 45944),
('Grégoire271', 94, 100, 65535, 84, 0, 69, 'La terre', 0, 'La terre', 53633);
:roll:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

14 févr. 2008, 17:53

Tu passes le 1er niveau de justesse... Level up, distribue tes 10 points de compétence acquis au choix sur "SQL", "Poster bon forum", "Humour" :lol:

Faut y aller par étapes :
Une requête qui récupère la position du membre

Code : Tout sélectionner

SELECT COUNT(*) FROM scores WHERE SCOREMOIS <= (SELECT SCOREMOIS FROM scores WHERE pseudo = 'pseudo') ORDER BY SCOREMOIS
Ceci devrait renvoyer la position suffit donc de retirer 30 à ce chiffre pour avoir la borne inférieure (attention à ne pas dépasser zéro) et d'y ajouter 30 pour la borne supérieure en PHP.

Puis une requête avec LIMIT

Code : Tout sélectionner

SELECT * FROM scores ORDER BY SCOREMOIS LIMIT $borne_inf , $borne_sup

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 58 Messages

14 févr. 2008, 18:29

Ok merci à toi....donc il me semble avoir compris le truc aussi je fais :
								$reponse = mysql_query("SELECT COUNT(*) as rang FROM scores WHERE SCOREMOIS <= (SELECT SCOREMOIS  FROM scores WHERE pseudo = 'POLLUX159'
								ORDER BY SCOREMOIS )"); 
								$donnees = mysql_query($reponse);
								$rang=mysql_num_rows($donnees);
								echo "RANG".$rang;
Mais j'obtiens un message :
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in F:\MesApplications\SOFTS WEB\wamp\www\TESTS\QuestarOnline\index.php on line 191
Où est ce que je courge?

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

ViPHP
ViPHP | 4039 Messages

14 févr. 2008, 18:35

euh, pourquoi tu refais des requêtes, en utilisant la variable de résultat ?

Plutôt ceci:
$reponse = mysql_query("SELECT COUNT(*) as rang FROM scores WHERE SCOREMOIS <= (SELECT SCOREMOIS  FROM scores WHERE pseudo = 'POLLUX159' ORDER BY SCOREMOIS )"); 
$rang=mysql_num_rows($reponse); 
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

14 févr. 2008, 18:38

D'autant plus que mysql_num_rows() ne te sera pas d'une grande aide... je parie qu'elle te renverra "1" :P
(COUNT() ;) )

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 58 Messages

14 févr. 2008, 18:48

Donc j'ai réussi à afficher le rang d'un joueur au choix... je m'attaque à la liste complète maintenant....

Déjà merci à tous et à bientôt sans doute...

$reponse = mysql_query("SELECT COUNT(*) as rang FROM scores WHERE SCOREMOIS >= (SELECT SCOREMOIS  FROM scores WHERE pseudo = 'alex286'	ORDER BY SCOREMOIS desc)"); 

$resultat=mysql_fetch_row($reponse); 

$rang=($resultat[0]);

echo "RANG:".$rang;

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 févr. 2008, 00:02

<completement HS>
Honorable Zeus! que ta foudre me soit épargnée...et que ma descendance soit impuissante sur trois générations...
Tu m'expliques comment ta descendance pourrait être impuissante sur 3 générations ? Dès la 1ère génération impuissante, il n'y a plus de de descendance :-k
:lol:
</completement HS>
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

15 févr. 2008, 00:33

<completement HS>
Honorable Zeus! que ta foudre me soit épargnée...et que ma descendance soit impuissante sur trois générations...
Tu m'expliques comment ta descendance pourrait être impuissante sur 3 générations ? Dès la 1ère génération impuissante, il n'y a plus de de descendance :-k
:lol:
</completement HS>
Arf j'allais dire la même chose quand j'ai lu mais avec tout ce sérieux à répondre j'ai oublié :cry: ... :lol:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 804 Messages

15 févr. 2008, 10:52

*entra un petit gobelin blanc, un cure-dents a la main, et un casque jaune sur la tête*

D'ailleurs, il me semble qu'on se trouve a la mauvaise auberg.. au mauvais forum, ça a plutôt lieu d'être au forum sql.
:mrgreen: :mrgreen: :mrgreen: :mrgreen:

Invité
Invité n'ayant pas de compte PHPfrance

17 févr. 2008, 21:28

Tout cela pour vous changer les idées en répondant aux posts les loulous... j'espère que ca vous a changé du train-train...

a+ :wink:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

18 févr. 2008, 00:50

Dernière épreuve
Modération :
speccy666, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute