JeuWeb - Crée ton jeu par navigateur
[REGLE]SQL: Requete SELECT Jointe et SUM() - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [REGLE]SQL: Requete SELECT Jointe et SUM() (/showthread.php?tid=1415)



[REGLE]SQL: Requete SELECT Jointe et SUM() - corentone - 04-07-2007

Bonjour!
Pour mon Jeu, j'ai besoin de prendre la réputation totale d'un joueur.
Cette reputation totale est la somme de toutes les reputations des Djs de ce joueur, ainsi que de sa reputation de base.

Notons pour un DJ d'id 1:
Code :
SELECT SUM(dj.reputation_dj)+joueur.reputation_joueur AS reputation_total FROM `dj` JOIN `joueur` ON dj.id_joueur=joueur.id_joueur WHERE dj.id_joueur=1 AND joueur.id_joueur=1

Mes tables se nomment dj et Joueur. Un joueur peut avoir plusieurs djs, d'ou la somme.
Ce code marche.

Je voudrais généraliser la requete pour faire un classement des joueurs. Voila ce que je faisais:

Code :
SELECT joueur.id_joueur, SUM( dj.reputation_dj )+joueur.reputation_joueur AS reputation_total FROM `dj`
LEFT JOIN `joueur` ON dj.id_joueur = joueur.id_joueur ORDER BY reputation_total
LIMIT 0 , 30

Pour prendre les 30Premiers de mon Classement en Matiere de reputation.

Mais quand je teste dans php MY Admin:
Code :
#1140 - Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

Je crois que c'est parce que je ne peux pas Melanger une somme d'un champ d'une table avec la prise d'un champ d'une autre table....

J'en appelle a vous pour essayer de trouver une solution, car je suis un peu dans l'impasse.

Je suis ouvert à toute remarque Smile


RE: SQL: Requete SELECT Jointe et SUM() - PatteDePoule - 04-07-2007

Essai dans ce genre là :

Code :
SELECT joueur.id_joueur, SUM( dj.reputation_dj )+joueur.reputation_joueur AS reputation_total FROM `dj`
LEFT JOIN `joueur` ON dj.id_joueur = joueur.id_joueur
GROUP BY joueur.id_joueur
ORDER BY reputation_total DESC
LIMIT 0 , 30

Quand tu mets un SUM avec d'autres info à côté il faut que tu les énumères dans un GROUP BY.


RE: SQL: Requete SELECT Jointe et SUM() - Wells - 04-07-2007

Code :
SELECT joueur.id_joueur, SUM( dj.reputation_dj )+joueur.reputation_joueur AS reputation_total FROM `joueur`
LEFT JOIN `dj` ON dj.id_joueur = joueur.id_joueur
GROUP BY joueur.id_joueur
ORDER BY reputation_total DESC
LIMIT 0 , 30

Inverse tes deux table car la tu jointe pour chaque ligne de dj sur la table joueur, ce qui ne sert à rien et prend de la ressource.

Sinon avec le group by c'est ok Smile


RE: SQL: Requete SELECT Jointe et SUM() - corentone - 06-07-2007

Parfait Big Grin

Ca marche Wink Je vais etudier au passage la syntaxe du Group By Wink

Merci de votre efficacité de votre rapidité!

A bientot

Corentone


RE: SQL: Requete SELECT Jointe et SUM() - Mysterarts - 06-07-2007

Un petit [REGLE] irai si bien au titre !
Merci ^^

Mysterarts