Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1599 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Problèmes avec plusieures requêtes...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problèmes avec plusieures requêtes...

n°1596026
Raul10
Raul, joueur du Real Madrid.
Posté le 06-08-2007 à 00:44:25  profilanswer
 

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...  :p ).
 
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.

mood
Publicité
Posté le 06-08-2007 à 00:44:25  profilanswer
 

n°1596051
jpcheck
Pioupiou
Posté le 06-08-2007 à 08:50:05  profilanswer
 

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à ?

n°1596094
Raul10
Raul, joueur du Real Madrid.
Posté le 06-08-2007 à 10:48:18  profilanswer
 

jpcheck a écrit :

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à ?


 
Oui, je sais faire.
 
SELECT * FROM score WHERE jeu=''.$jeu'' ORDER BY score DESC LIMIT 0,3

n°1596097
durkheim
Posté le 06-08-2007 à 11:01:32  profilanswer
 

"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)) )
 

n°1596116
rufo
Pas me confondre avec Lycos!
Posté le 06-08-2007 à 11:54:28  profilanswer
 

tu peux pas mettre max() dans la clause where. Par contre, tu peux la mettre dans le having

n°1596118
Raul10
Raul, joueur du Real Madrid.
Posté le 06-08-2007 à 11:56:21  profilanswer
 

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...


---------------
Raul, le meilleur joueur de tous les temps !
n°1596142
rufo
Pas me confondre avec Lycos!
Posté le 06-08-2007 à 13:22:26  profilanswer
 

ç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)))

n°1596149
Raul10
Raul, joueur du Real Madrid.
Posté le 06-08-2007 à 13:29:45  profilanswer
 

rufo a écrit :

ç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)))


 
J'ai une erreur avec ton code...


---------------
Raul, le meilleur joueur de tous les temps !
n°1596150
MagicBuzz
Posté le 06-08-2007 à 13:32:14  profilanswer
 

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 ( :heink: )
 
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 :
  1. SELECT pseudo, sum(decode(score, 1, 1, 0)) premier, sum(decode(score, 2, 1, 0)) second, sum(decode(score, 3, 1, 0)) troisieme, sum(decode(score, 1, 10, 2, 5, 3, 1, 0)) points
  2. FROM score
  3. WHERE jeu = :jeu
  4. GROUP BY pseudo
  5. ORDER BY points DESC


 
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.

n°1596153
MagicBuzz
Posté le 06-08-2007 à 13:34:05  profilanswer
 

PS : Pourquoi tu parles de "plusieurs requêtes" ? Tu comptais faire 36 requêtes pour un résultat aussi basique ?

mood
Publicité
Posté le 06-08-2007 à 13:34:05  profilanswer
 

n°1596155
Raul10
Raul, joueur du Real Madrid.
Posté le 06-08-2007 à 13:36:45  profilanswer
 

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.


---------------
Raul, le meilleur joueur de tous les temps !
n°1596156
MagicBuzz
Posté le 06-08-2007 à 13:38:38  profilanswer
 

Raul10 a écrit :

Eh bien non, justement, score contient un score. C'est pour ça que cette requête est difficile à écrire.


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.

n°1596168
MagicBuzz
Posté le 06-08-2007 à 13:58:28  profilanswer
 

Ah, si, je viens de comprendre...
 
C'est un stupide "Hall of Fame" que tu veux faire [:magicbuzz]
 
Je regarde ça quand j'ai 5 minutes

n°1596189
Raul10
Raul, joueur du Real Madrid.
Posté le 06-08-2007 à 14:26:40  profilanswer
 

MagicBuzz a écrit :

Ah, si, je viens de comprendre...
 
C'est un stupide "Hall of Fame" que tu veux faire [:magicbuzz]
 
Je regarde ça quand j'ai 5 minutes


 
 
Ok merci à toi.  :)


---------------
Raul, le meilleur joueur de tous les temps !
n°1596192
MagicBuzz
Posté le 06-08-2007 à 14:30:04  profilanswer
 

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

n°1596197
Raul10
Raul, joueur du Real Madrid.
Posté le 06-08-2007 à 14:39:52  profilanswer
 

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...


---------------
Raul, le meilleur joueur de tous les temps !
n°1596204
MagicBuzz
Posté le 06-08-2007 à 14:55:44  profilanswer
 

D'où la raison de mon abandon :p

n°1596206
Raul10
Raul, joueur du Real Madrid.
Posté le 06-08-2007 à 15:11:30  profilanswer
 

MagicBuzz a écrit :

D'où la raison de mon abandon :p


 
Ok, merci quand même.


---------------
Raul, le meilleur joueur de tous les temps !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Problèmes avec plusieures requêtes...

 

Sujets relatifs
system, popen et leurs problèmes :|[C] Problèmes avec les chaines de caractères
AES / RSA : Bad Data error et autres problemes (de stream?)Extraction de plusieurs requêtes SQL Server sous Word ou Excel
[QST] Problèmes de links[resolu]probleme avec les '&' et les requetes ajax
Requêtes SQL sur AS400 via lien ODBC ? (PHP)Problèmes $_COOKIE et $_POST
Menu en html, css et javascript, nombreux problèmesNombre de requêtes
Plus de sujets relatifs à : Problèmes avec plusieures requêtes...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR