Page 1 sur 3

Bien exploiter cette base !

Posté : 18 oct. 2012, 05:34
par jycs
Bonsoir,

J'aurais besoin d'aide pour plusieurs choses, voici ma table :
lien si vous voyez pas tout : http://img15.hostingpics.net/pics/82596 ... 052449.jpg
Image

Premièrement je cherche à afficher le plus grand chiffre de la colonne "distance_traveled". Ensuite je cherche à afficher le 2em, puis le 3em (séparément pour les mettre en forme).

Je suis une bille en PHP, j'ai passé des heures à essayer des trucs (ne pas faire gaffe à "name", je gère pour ça je pense) :
    public function getMostDistancer() {
        $row = mysql_fetch_assoc(mysql_query('SELECT `uuid` name, COUNT(`distance_traveled`) count
                                                FROM players
						WHERE distance_traveled != -1
                                                GROUP BY `distance_traveled`
                                                ORDER BY count DESC'));
        return $row;
    }
Puis :
            <?php 
            $ar = $serverObj->getMostDistancer();
            echo $ar['count'];
        ?>
Mais il m'affiche "1"... Je ne sais pas d'où il sort ce chiffre.

Si vous pouviez m'aider, ça serait vraiment super !

Re: Bien exploiter cette base !

Posté : 18 oct. 2012, 09:11
par Mazarini
Je peux pas voir la description de la table.

Il faut remplacer count par sum pour cumuler la valeur d'une colonne au lieu de compter le nombre de ligne.

Ensuite, il faut que tu trouves le critère pour cumuler, uuid` plutot que distance_traveled ?

Re: Bien exploiter cette base !

Posté : 18 oct. 2012, 15:22
par jycs
Super ça marche, merci !

Maintenant, comment afficher le 2em, puis le 3em plus gros résultat ?

Re: Bien exploiter cette base !

Posté : 18 oct. 2012, 16:15
par Mazarini
En lisant les résultats dans une boucle au lieu de ne lire que le premier.

Eventuellement tu peux ajouter limit 3 (ou ce que tu veux) à la fin de la requete.

Re: Bien exploiter cette base !

Posté : 18 oct. 2012, 16:30
par jycs
Je fais comment pour la boucle ?

Re: Bien exploiter cette base !

Posté : 18 oct. 2012, 17:15
par sam12
Surement avec un while.
Quel est le nouveau code?

Re: Bien exploiter cette base !

Posté : 18 oct. 2012, 17:34
par jycs
Surement avec un while.
Quel est le nouveau code?
    public function getMostDistancer() {
        $row = mysql_fetch_assoc(mysql_query('SELECT `uuid` name, SUM(`distance_traveled`) count
                                                FROM players
						WHERE distance_traveled != -1
                                                GROUP BY `uuid`
                                                ORDER BY count DESC'));
        return $row;
    }
 <?php
            $ar = $serverObj->getMostDistancer();
            $player = $serverObj->getPlayer($ar['name']);
            if ($player) { 
            	        echo(STRING_ALL_DISTANCER); 
            	?>
            : </h2>
          <h3 class="ca-sub"> <a class="fort" href="?view=player&uuid=<?php echo($player->getUUID()); ?>"><?php echo($player->getName()); ?></a>
            <?php 
            	        echo $ar['count'];
            	    ?>
            <?php echo(STRING_ALL_DISTANCER_UNIT); ?>
            <?php } else echo(STRING_ALL_NONE); ?>

Re: Bien exploiter cette base !

Posté : 19 oct. 2012, 15:10
par jycs
Svp, j'aimerais savoir faire ça pour bosser cette nuit là dessus :D

Re: Bien exploiter cette base !

Posté : 19 oct. 2012, 15:54
par Mazarini
    public function getMostDistancer() {
        $res = mysql_query('SELECT `uuid` name, SUM(`distance_traveled`) count
                                                FROM players
                                                WHERE distance_traveled != -1
                                                GROUP BY `uuid`
                                                ORDER BY count DESC
                                                LIMIT 3');
        wihle $row = mysql_fetch_assoc($res) {$rows[] = row;}
     
        return $rows;
    }
Et ensuite tu utilises $rows[0], $rows[1] et $rows[2]... (suivant la valeur de Limit 3 et le nombre de lignes disponibles)

Re: Bien exploiter cette base !

Posté : 19 oct. 2012, 16:42
par jycs
    public function getMostDistancer() {
        $res = mysql_query('SELECT `uuid` name, SUM(`distance_traveled`) count
                                                FROM players
                                                WHERE distance_traveled != -1
                                                GROUP BY `uuid`
                                                ORDER BY count DESC
                                                LIMIT 3');
        wihle $row = mysql_fetch_assoc($res) {$rows[] = row;}
     
        return $rows;
    }
Et ensuite tu utilises $rows[0], $rows[1] et $rows[2]... (suivant la valeur de Limit 3 et le nombre de lignes disponibles)
Un grand merciiii !! :)

Re: Bien exploiter cette base !

Posté : 19 oct. 2012, 17:36
par sam12
J'aurais plutôt fait
$rows[] = $row;
Et attention en testant, c'est while et non wihle ;)

Re: Bien exploiter cette base !

Posté : 19 oct. 2012, 18:47
par jycs
Effectivement il me fait une erreur :
Parse error: syntax error, unexpected T_VARIABLE, expecting

J'ai bien corrigé le while pourtant

Re: Bien exploiter cette base !

Posté : 19 oct. 2012, 22:38
par jycs
Y'aurait personne pour me dire le pourquoi de cette erreur (pour bosser cette nuit) ?

Re: Bien exploiter cette base !

Posté : 20 oct. 2012, 02:19
par sam12
Il faudrait le code pour voir ce que tu as fait.

Re: Bien exploiter cette base !

Posté : 20 oct. 2012, 03:13
par jycs

Code : Tout sélectionner

public function getMostDistancer() { $res = mysql_query('SELECT `uuid` name, SUM(`distance_traveled`) count FROM players WHERE distance_traveled != -1 GROUP BY `uuid` ORDER BY count DESC LIMIT 3'); while $row = mysql_fetch_assoc($res) {$rows[] = row;} return $rows; }
Déjà ce code fait une erreur.