Question get BDD

Baratox
Invité n'ayant pas de compte PHPfrance

17 oct. 2012, 05:42

Bonjour,

J'ai une fonction qui appelle la valeur la plus élevée d'une table :

Code : Tout sélectionner

public function getMostKillerPVP() { $row = mysql_fetch_assoc(mysql_query('SELECT `killed_by_uuid` name, COUNT(`killed_by_uuid`) count FROM kills WHERE `killed_uuid` IS NOT NULL AND `killed_uuid` != " " AND `killed_by_uuid` IS NOT NULL AND `killed_by_uuid` != " " GROUP BY `killed_by_uuid` ORDER BY count DESC')); return $row; }
Elle fonctionne bien, mais j'aimerais savoir créer d'autres fonctions qui appellent la 2nd valeur la plus élevée, la 3eme, etc.

2eme chose, j'aimerais bien apprendre à exploiter les bases mysql et json, quelqu'un peut me donner des mots clés pour que je cherche ?

Merci !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 oct. 2012, 11:18

En l'occurrence, ta requête ne retourne pas la valeur la plus élevée d'une table, mais elle retourne le nombre d'enregistrements trouvés par killed_by_uuid, trié par ordre décroissant. Ta fonction retourne ensuite le premier résultat de cette requête qui pour le coup correspond à celui qui a le plus d'enregistrements.

Si tu veux exploiter les autres valeurs, au lieu de faire un $row = ... et retourner cette valeur, il te suffit de boucler avec un while sur les résultats de ta requêtes. Tu auras ainsi un tableau contenant dans l'ordre le premier, le 2e, le 3e, etc.
$tab = array(); // tableau de résultats
$rs = mysql_query(...);
while ($row = mysql_fetch_assoc($rs) ) { // parcours les enregistrements
   $tab[] = $row; // ajoute chaque enregistrement dans le tableau
}
return $tab; // retourne le tableau
Si tu affiche $tab tu auras alors

Code : Tout sélectionner

Array ( 0 => Array (name : 'xxx', count : 789) 1 => Array (name : 'yyy', count : 456) 2 => Array (name : 'zzz', count : 123) )
Au besoin tu peux ajouter un "LIMIT 0, #" à ta requête pour ne recevoir que les # premiers résultats.

Pour MySQL et JSON, ben les mots clés sont MySQL et JSON :)
Le langage SQL te permet d'interroger ta base de données (MySQL ou autre).. JSON de mette en forme des données pour pouvoir exploiter des objets et des tableaux associatifs avec Javascript.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Baratox
Invité n'ayant pas de compte PHPfrance

17 oct. 2012, 14:55

Wow c'est super tu me gates ^^

Moi ça me fait rêver, l'exploit de db !

Merci pour ton aide, je vais m'amuser toute la nuit grace à toi :p

Baratox
Invité n'ayant pas de compte PHPfrance

17 oct. 2012, 15:24

Par contre je n'ai pas compris comment m'en servir, je débute vraiment.

Le code qui affiche le résultat le plus élevé, c'est :

Code : Tout sélectionner

<?php echo(STRING_SERVER_MOST_SQUISHY_PLAYER); ?>: <?php $ar = $serverObj->getMostKilledPVP(); $player = $serverObj->getPlayer($ar['name']); if ($player) { ?> <a id="onlinePlayer" href="?view=player&uuid=<?php echo($player->getUUID()); ?>"><?php echo($player->getName()); ?></a> - ( <?php echo $ar['count']; echo(STRING_ALL_PVP_DEATHS); ?> ) <?php } else echo(STRING_ALL_NONE); ?>

Baratox
Invité n'ayant pas de compte PHPfrance

17 oct. 2012, 18:46

C'est bon j'ai fini par comprendre :)


Je créé une autre fonction avec ce que tu as écris :

Code : Tout sélectionner

public function getMostKillerPVP2() { $tab = array(); // tableau de résultats $rs = mysql_query('SELECT `killed_by_uuid` name, COUNT(`killed_by_uuid`) count FROM kills WHERE `killed_uuid` IS NOT NULL AND `killed_uuid` != " " AND `killed_by_uuid` IS NOT NULL AND `killed_by_uuid` != " " GROUP BY `killed_by_uuid` ORDER BY count DESC'); while ($row = mysql_fetch_assoc($rs) ) { // parcours les enregistrements $tab[] = $row; // ajoute chaque enregistrement dans le tableau } return $tab; // retourne le tableau }

J'appelle $tab sur ma page :

Code : Tout sélectionner

<?php $tab; ?>
Je n'ai pas d'erreur, mais problème, il n'affiche rien !

Baratox
Invité n'ayant pas de compte PHPfrance

17 oct. 2012, 23:16

Au pire si je comprend vraiment rien, quelqu'un aurait-il un tuto sur "comment exploiter une base de donnée, comme je veux faire là" ?