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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Résolu] SQL liste meilleur score pour 1 joueur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] SQL liste meilleur score pour 1 joueur

n°1756719
totof74
Posté le 08-07-2008 à 10:18:14  profilanswer
 

Bonjour à tous,
 
Voilà j'ai un petit problème sur une requete SQL que je n'arrive pas à faire.
En fait je souhaite faire un programme qui permette d'exporter les scores du jeu "Ultrastar" (clone gratuit de singstar) vers une page web.
 
Mon idée serait qu'après avoir joué, on lance le programme qui irait chercher les scores dans le fichier ultrastar.db. (base au format sqllite) et qui remplirait une base mysql placé sur un compte chez free. Ceci afin de pouvoir faire un tableau de scores commun avec nos amis.
 
La base est composée de 2 tables :
US_Scores
-> SongID
-> difficulty
-> Player
-> Score
 
US_Songs
-> ID
-> Artiste
-> Title
-> Play (je crois mais ce champs, je m'en fout en fait : il comptabilise le nombre de fois qu'une chanson a été jouée).
 
Ce que je voudrais c'est extraire de la base la liste des meilleurs scores par chanson et par joueur, pour obtenir une seule ligne, par exemple :
artiste,    titre,                 difficulty, player,   score
Nirvana,   Rape me,            0,          toto,     5000
Nirvana,   Rape me,            0,          titi,       4500
Queen,    Show must go on  0,          toto,     3000
Etc....
 
Donc le meilleur score pour chaque joueur, sur chaque chanson et pour chaque difficulté.
 
J'ai essayé :
SELECT artiste, title, difficulty, player, score FROM us_songs, us_scores w WHERE us_songs.id=us_scores.songid GROUP BY player, score
 
Mais en fait ça me donne la liste complète (j'ai tous les scores pour un joueur sur une même chanson pour une même difficulté : or il me faut uniquement son meilleur score). Je pense qu'il faut faire une requête imbriquée, mais je n'arrive pas à la construire.
 
Quelqu'un a-t-il une idée, je pense que ce ne doit pas être très dur, mais je sèches (mes cours d'SQL sont beaucoup trop anciens).
 
(je précise qu'il s'agit du 'mod' ultrastar deluxe : dans la version normale les scores ne sont pas stockés dans une base de donnée).
 
Merci de votre aide :) par avance.


Message édité par totof74 le 08-07-2008 à 15:51:01
mood
Publicité
Posté le 08-07-2008 à 10:18:14  profilanswer
 

n°1756733
anapajari
s/travail/glanding on hfr/gs;
Posté le 08-07-2008 à 10:37:54  profilanswer
 

SELECT player, artiste, title, difficulty,  max(score) FROM us_songs, us_scores w WHERE us_songs.id=us_scores.songid GROUP BY player, artiste, title, difficulty


---------------
Software and cathedrals are much the same - first we build them, then we pray.
n°1756738
totof74
Posté le 08-07-2008 à 10:50:35  profilanswer
 

Salut et merci beaucoup de ta réponse :)
Je viens d'essayer en me créant une bdd access pour tester, et ça ne marche pas (ça vient peut-être d'access ?). En fait il me demande la valeur de l'expression us_scores.songid avant de lancer la requête... Et si je lui en donne une, il me sort bien l' artiste/titre/player, mais le score ne correspond pas : il me prend le meilleur score pour le joueur sur toute les chansons.
 
Dans mon exemple ci-dessus, ça donnerais un truc du style :
Queen,    Show must go on  0,          toto,     5000 (alors que ça devrait être 3000)
Queen,    Show must go on  0,          titi,       4500 (alors que titi dans mon exemple, n'as pas de score pour cette chanson).
 
En fait, en gros, il prend le meilleur score pour un joueur et il l'applique à la chanson qu'on lui a donné...
???


Message édité par totof74 le 08-07-2008 à 10:55:14
n°1756806
anapajari
s/travail/glanding on hfr/gs;
Posté le 08-07-2008 à 12:19:13  profilanswer
 

j'avais même pas vu la syntaxe dégueu pour ta jointure :o
 
SELECT player, artiste, title, difficulty,  max(score) FROM us_songs join us_scores on us_songs.id=us_scores.songid GROUP BY player, artiste, title, difficulty


---------------
Software and cathedrals are much the same - first we build them, then we pray.
n°1756837
totof74
Posté le 08-07-2008 à 13:41:30  profilanswer
 

anapajari a écrit :

j'avais même pas vu la syntaxe dégueu pour ta jointure :o


 
=> pô compris  :heink:  
 
Sinon, j'ai essayé ta requête, ça me donne : erreur de syntaxe dans la clause FROM, j'ai ajouté la table us_scores, mais pareil...
 
Finalement, je pense que j'ai trouvé, en faisant ça :
 
SELECT us_scores.difficulty, us_scores.player, Max(us_scores.score) AS MaxDescore, us_songs.id, us_songs.artiste, us_songs.title
FROM us_scores, us_songs
GROUP BY us_scores.songid, us_scores.difficulty, us_scores.player, us_songs.id, us_songs.artiste, us_songs.title
HAVING us_songs.id=us_scores!songid;
 
C'est sans doute pas très propre, vu que ça sort du requêteur d'access, mais ça à l'air de marcher.
Qu'en penses tu ? on peut simplifier ?
 
thanks :jap:

Message cité 1 fois
Message édité par totof74 le 08-07-2008 à 13:42:35
n°1756842
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-07-2008 à 13:57:33  profilanswer
 

totof74 a écrit :


 
=> pô compris  :heink:


les jointures se font avec (INNER|LEFT|RIGHT) JOIN, pas avec une clause WHERE


---------------
J'ai un string dans l'array (Paris Hilton)
n°1756855
totof74
Posté le 08-07-2008 à 14:12:13  profilanswer
 

Harkonnen a écrit :


les jointures se font avec (INNER|LEFT|RIGHT) JOIN, pas avec une clause WHERE


 
=> OK  merci :jap:  
Hé ben vous êtes contents là, y'en a plus de "WHERE"  :whistle:  
 
Le HAVING ça vous va ? ou "c pô bô"


Message édité par totof74 le 08-07-2008 à 14:12:59
n°1756874
anapajari
s/travail/glanding on hfr/gs;
Posté le 08-07-2008 à 14:35:04  profilanswer
 

c pas bo et ça fait surtout pas ce que tu veux.
Sans la description des tables c'est dur de t'aider pour écrire la jointure


---------------
Software and cathedrals are much the same - first we build them, then we pray.
n°1756884
totof74
Posté le 08-07-2008 à 14:41:53  profilanswer
 

anapajari a écrit :

c pas bo et ça fait surtout pas ce que tu veux.
Sans la description des tables c'est dur de t'aider pour écrire la jointure


 
Heu ben si justement... enfin j'ai fait un jeu de test sur 10 enregistrements ça à l'air de marcher (sous access, il tolère peut-être les conneries  :??: )
C pas bo => ça c'est fort possible  :whistle:  
 
Pour la description des tables, ce qu'il y avait dans mon premier topic ne convient pas ? Dis moi ce que tu as besoin d'autre. Merci de ton aide

n°1756924
anapajari
s/travail/glanding on hfr/gs;
Posté le 08-07-2008 à 15:27:27  profilanswer
 

Si mais j'avais pas lu :o
Et d'ailleurs ma requête devrait marcher du coup, comprends po mais en même temps je maitrise pas access ...
essaye en forçant le inner join:

Code :
  1. SELECT
  2.  player,
  3.  artiste,
  4.  title,
  5.  difficulty,
  6.  max(score)
  7. FROM
  8.           us_songs
  9. INNER JOIN us_scores ON us_songs.id=us_scores.songid
  10. GROUP BY
  11.  player,
  12.  artiste,
  13.  title,
  14.  difficulty
 

Après si ça marche avec le HAVING, vu que j'ai pas envie de me lancer dans une explication sur les différences entre un join, un where et un having... Eh bien t'as qu'à laisser comme tu sens.


Message édité par anapajari le 08-07-2008 à 15:28:15

---------------
Software and cathedrals are much the same - first we build them, then we pray.
mood
Publicité
Posté le 08-07-2008 à 15:27:27  profilanswer
 

n°1756935
totof74
Posté le 08-07-2008 à 15:49:24  profilanswer
 

YESSSS ! Ca marche !
Merci beaucoup. C'est vachement plus joli :)
 
Je comprend pas pourtant, dans mes essais hier, j'étais pas très loin de ça :(
 
Pour les explications, t'inquiètes, j'irais les chercher où il faut, mais malgré l'explication c'est pas toujours facile de passer à la pratique, donc...
 
C'était peut-être lié à access (je sais bien qu'il ne fait pas les choses très proprement), mais vu que j'avais que ça pour tester en l'absence de ma base de donnée...
 
En tout cas merci


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

  [Résolu] SQL liste meilleur score pour 1 joueur

 

Sujets relatifs
liste déroulante et popup[SQL] problème requête
[Résolu] Comment "pré-stocker" des réponses à des boutons d'un .exe ?Choix pour meilleur performance upload : PHP vs MySQL ?
[Résolu] AppendChild qui insere mais pas de css sous IE[Résolu] Communiquer entre deux processus: chose impossible ?
SQL Server - BULK INSERT sur un fichier csv avec guillemets[Résolu] Editeur wysiwyg dans un formulaire html
[RESOLU] Utilisation de la fonction WSAAddressToString()[Résolu] Batch confirmation d'ajout d'une imprimante en réseaux !
Plus de sujets relatifs à : [Résolu] SQL liste meilleur score pour 1 joueur


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