JeuWeb - Crée ton jeu par navigateur
[PHP] Position d'un champ dans une table - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [PHP] Position d'un champ dans une table (/showthread.php?tid=3207)



[PHP] Position d'un champ dans une table - Christophe - 24-10-2008

Bonjour,

Je cherche à récupérer la position d'un champ qui se nomme point dans ma table des membres afin de savoir quelle est la place du membre en fonction de son nombre de points, j'ai essayer un select count mais sa ne fonctionne pas bien, il y a une grande différence entre la position initiale et le résultat donné j'ai cherché à droite et gauche pour voir un peu si je pouvais trouver mais visiblement je ne suis pas le seul à pêcher sur ce sujet.

j'ai essayé cela :

<--code php
$positgeneral = mysql_query('SELECT COUNT((id)+1) as position FROM infosjeu WHERE points>="'.$points.'" AND pseudo<="'.addslashes($_SESSION['pseudo']).'"') or die(mysql_error());
-->

Voilà si quelqu'un a quelque chose de mieux à me proposer je suis preneur.

Merci à la communauté Smile


RE: [php] Position d'un champ dans une table - oualala - 24-10-2008

Ben tu fais une boucle while si j'ai bien compris Wink (si tu veux faire un classement)


RE: [php] Position d'un champ dans une table - Meardon - 24-10-2008

Bonjour,

Tu peux combiner des requêtes, il suffit alors de compter le nombre de joueurs ayant un classement supérieur au tien :

$select = "SELECT count(1) FROM infosjeu WHERE points > (SELECT score FROM table_score WHERE pseudo<='addslashes($_SESSION['pseudo'])'")

Attention mon code n'est peut-être pas bon, mais tu vois l'idée ^^

EDIT :

oualala a écrit :Ben tu fais une boucle while si j'ai bien compris Wink (si tu veux faire un classement)

Ca peut marcher pour faire un classement complet, mais je crois que Christophe ne cherche qu'à récupérer le classement d'un seul joueur. Dans quel cas une boucle while s'avèrerait trop coûteuse.


RE: [php] Position d'un champ dans une table - Melimelo - 24-10-2008

j'ai vraiment pas compris ce que tu voulais faire ...

En gros tu veux connaitre le classement de ton joueur en fonction de ces point , c'est ca ?


RE: [php] Position d'un champ dans une table - Zamentur - 24-10-2008

Code PHP :
<?php 
$pseudo
=mysql_real_escape_string($_SESSION['pseudo']);
$sql=sprintf("SELECT COUNT(*) FROM `infosjeu` WHERE `points` <=(SELECT `points` FROM `infosjeu` WHERE `pseudo`='%s')", $pseudo);
$req=mysql_query($sql) or die(mysql_error());

NB il est possible de cinder en 2 la requete vu qu'il ya cette sous requete...

Code PHP :
<?php 
$pseudo
=mysql_real_escape_string($_SESSION['pseudo']);
$sql=sprintf("SELECT `points` FROM `infosjeu` WHERE `pseudo`='%s'", $pseudo);
$req=mysql_query($sql) or die(mysql_error());
$ligne=mysql_fetch_row($req);

$sql=sprintf("SELECT COUNT(*) FROM `infosjeu` WHERE `points` <='%d'", $ligne[0]);
$req=mysql_query($sql) or die(mysql_error());
$ligne=mysql_fetch_row($req);
$place=$ligne[0];



RE: [php] Position d'un champ dans une table - Meardon - 24-10-2008

@Zamentur : Plagiat ! :non:


RE: [php] Position d'un champ dans une table - lemouix - 24-10-2008

Vive les helpers... c'est tout ce que j'ai à dire :p


RE: [PHP] Position d'un champ dans une table - Christophe - 27-10-2008

Bonjour à vous,

Merci à toi, sa fonctionne bien par contre j'ai essayé d'ajouté des conditions du style niveau="1" actif="oui" et sa ne fonctionne plus, sa déraille complètement de même que j'aimerais qu'il me traites les pseudo par ordre ASC afin que il y ait départage quand il y ais égalité.

C'est la première fois qu'une requête me résiste autant... Merci a tous ceux qui auront des idées sur cette ajout de conditions.

Merci à vous.


RE: [PHP] Position d'un champ dans une table - Argorate - 28-10-2008

Bonjour, voilà se que je propose

SELECT COUNT(*) AS position
FROM infosjeu
WHERE score > (SELECT score FROM infosjeu WHERE id = $id_joueur)

Je ne comprends pas vraiment le problème, on fait une sous-requête sélectionnant le score du joueur X, et la requête principal compte le nombre de tuples (d'enregistrements) de la table résultante qui ne contient que les tuples ayant un score plus élevé que le joueur X... (Je n'ai pas compté ceux ayant le même score, puisque a mon sens ils sont tous égaux, donc a la même place.)

PS : Je te conseil de travailler avec l’id du jouer et non son pseudo…

EDIT: si tu as bien suivit ma requete ne te renvoi que le nombre de joueur superieur au joueur X (en therme de score), donc si tu veux la place du joueur X, il te faudra faire position+1 dans ton code.