Problèmes avec plusieures requêtes... - SQL/NoSQL - Programmation
Marsh Posté le 06-08-2007 à 08:50:05
en fait, as-tu un peu cherché par toi même ?
C'est pas trop l amentalité ici de filé direct la solution toute faite.
Sais-tu faire remonter les trois meilleurs résultats par jeu déjà ?
Marsh Posté le 06-08-2007 à 10:48:18
jpcheck a écrit : en fait, as-tu un peu cherché par toi même ? |
Oui, je sais faire.
SELECT * FROM score WHERE jeu=''.$jeu'' ORDER BY score DESC LIMIT 0,3
Marsh Posté le 06-08-2007 à 11:01:32
"Comment faire pour afficher le nombre de fois ou le membre est premier sur un jeu ?"
A l'arrache non testé:
Select count(*), pseudo as p from (select * from score where p = score.pseudo and score=(max(score)) )
Marsh Posté le 06-08-2007 à 11:54:28
tu peux pas mettre max() dans la clause where. Par contre, tu peux la mettre dans le having
Marsh Posté le 06-08-2007 à 11:56:21
rufo a écrit : tu peux pas mettre max() dans la clause where. Par contre, tu peux la mettre dans le having |
Je n'ai pas compris ce que tu veux dire...
Marsh Posté le 06-08-2007 à 13:22:26
ça : Select count(*), pseudo as p from (select * from score where p = score.pseudo and score=(max(score)) )
ça marche pas car on peut pas mettre la fonction max() dans la clause where. Par contre, on peut la mettre dans la clause having.
ex : Select count(*), pseudo as p from (select * from score where p = score.pseudo HAVING score=(max(score)))
Marsh Posté le 06-08-2007 à 13:29:45
rufo a écrit : ça : Select count(*), pseudo as p from (select * from score where p = score.pseudo and score=(max(score)) ) |
J'ai une erreur avec ton code...
Marsh Posté le 06-08-2007 à 13:32:14
J'imagine que "score" ne contient pas un score, mais la position sur le podium (c'est à dire qu'on se fout que le joueur ait fait 84350 points à Super Mario, l'important c'est qu'il a le 3° meilleur score, et donc qu'on stocke 3)
Car si c'est pas ça, déjà je vois pas comment, sans notion de tournois, tu peux comparer les scores pour déduire si le joueur est premier ou second ( )
Ensuite, astuce simple pour compter des valeurs définies dans une table : un SUM() sur un DECODE() -pas de chance pour toi, en MySQL DECODE() n'existe pas, je te laisse te débrouiller tout seul avec un CASE à la place)
Code :
|
J'ai pris des libertées avec ton barème, je préfère 1° = 10 points, 2° = 5 points, 3° = 1 point, + = 0 points... C'est un peu plis fair play pour les joueurs qui jouent peu mais qui explosent les autres à chaque match.
Marsh Posté le 06-08-2007 à 13:34:05
PS : Pourquoi tu parles de "plusieurs requêtes" ? Tu comptais faire 36 requêtes pour un résultat aussi basique ?
Marsh Posté le 06-08-2007 à 13:36:45
MagicBuzz a écrit : J'imagine que "score" ne contient pas un score, mais la position sur le podium |
Eh bien non, justement, score contient un score. C'est pour ça que cette requête est difficile à écrire.
Marsh Posté le 06-08-2007 à 13:38:38
Raul10 a écrit : Eh bien non, justement, score contient un score. C'est pour ça que cette requête est |
Impossible
A moins que "jeu" ne sois pas un "jeu" au sens "Super Mario", mais dans le sens "jeu" de tennis.
A ce moment, mise à part foutre la base par terre avec une usine à gaz, je vois pas trop comment tu peux faire.
Tu devrais commencer par stocker en plus la position sur le podium, là tu te lances dans un truc qui ne peux que foirer dès qu'il y aura quelques lignes dans ta base.
Marsh Posté le 06-08-2007 à 13:58:28
Ah, si, je viens de comprendre...
C'est un stupide "Hall of Fame" que tu veux faire
Je regarde ça quand j'ai 5 minutes
Marsh Posté le 06-08-2007 à 14:26:40
MagicBuzz a écrit : Ah, si, je viens de comprendre... |
Ok merci à toi.
Marsh Posté le 06-08-2007 à 14:30:04
Mouais, ça me saoule ton truc. Avec MySQL il doit y avoir des merdes du genre "order_group" ou je ne sais quoi (qui permettrait de numéroter les résultats en fonction d'une clause de tri par rapport à un critère), donc je creuse pas plus avec Oracle, je sens que je vais y passer la nuit pour faire la même chose que deux lignes en MySQL
Marsh Posté le 06-08-2007 à 14:39:52
MagicBuzz a écrit : Mouais, ça me saoule ton truc. Avec MySQL il doit y avoir des merdes du genre "order_group" ou je ne sais quoi (qui permettrait de numéroter les résultats en fonction d'une clause de tri par rapport à un critère), donc je creuse pas plus avec Oracle, je sens que je vais y passer la nuit pour faire la même chose que deux lignes en MySQL |
Bah de toute façon c'est avec Mysql qu'il faut faire...
Marsh Posté le 06-08-2007 à 15:11:30
MagicBuzz a écrit : D'où la raison de mon abandon |
Ok, merci quand même.
Marsh Posté le 06-08-2007 à 00:44:25
Bonjour à tous !
J'ai un problème avec plusieurs requêtes que je dois faire mais qui me paraissent tellement énorme que je ne sais pas par où commencer. Pour une meilleure compréhension, je vais illustrer mon propos.
J'ai une table nommé score. Cette table contient des scores, comme son nom l'indique. Dans cette table est enregistré des scores (non, sans blagues... ).
Voici la structure de la table :
id/pseudo/console/jeu/score
- id est un champ en auto increment qui sert a differencier les performances, pseudo contient le pseudo de la personne qui a réalisé le score, console contient le nom de la console sur laquelle le score a été réalisé, jeu contient le jeu sur lequel le score a été réalisé et score contient... le score.
Dans cette table, il y a des centaines d'enregistrements. Il faut donc faire une requête pour trier les informations afin d'afficher ce que l'on veux.
Problèmes
- Comment faire pour afficher le nombre de fois ou le membre est premier sur un jeu ? ou deuxième ? ou troisième ?
- Comment faire pour calculer le nombre total de point d'un membre ?
Avec un barème de ce type : 1ère place = 10 points, 2ème place = 9 points, 3ème place = 8 points...
- Comment faire pour afficher le classement général de tous les joueurs ?
Je vous remercie d'avance de l'aide que vous allez m'apporter ou bien tout simplement d'avoir pris la peine de lire ce topic dans son entierté.
Si vous avez une questions car vous n'avez pas bien compris le problème ou si vous souhaitez plus d'explications, n'hésitez surtout pas.
Cordialement, Raul10.