JeuWeb - Crée ton jeu par navigateur
Soucis classement alliance - 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 : Soucis classement alliance (/showthread.php?tid=1628)

Pages : 1 2 3


Soucis classement alliance - combo - 24-08-2007

Bonsoir,

J'ai un petit soucis avec ma requete qui additionne les points pour les alliances. Elle additione les points des premiers membres avec le nombre de membres dans cette alliance.

En gros ca donne :

Membre1_points+Membes1_points+Membres2_points+Membres2_points

Or, je voudrais qu'il fasse comme celà :

Membre1_points+Membres2_points

Voilà ma requête :

Code PHP :
<?php 
$requete
= "SELECT nom_alliance, sum(M.points) as points_alliance FROM alliances A LEFT JOIN membres M ON M.id_alliance = A.id_alliance GROUP BY M.id_alliance";

Si quelqu'un à une sollution,
Merci.


RE: Soucis classement alliance - NicoMSEvent - 24-08-2007

tu devrais essayer de groupes par "nom_alliance", il me semble que ça serait plus correct...


RE: Soucis classement alliance - Globe - 24-08-2007

Je vais ptet paraître pour un con mais si j'ai bien compris ton problème il te suffirais de diviser ton résultat par deux...


RE: Soucis classement alliance - uriak - 24-08-2007

Je suis étonné, tu peux mettre "alliances A" au lieu de "alliances AS A" ? (idem pour membres et M)

sinon, au vu de la requête, je dirais que GROUP BY M.id_alliances, A.id_alliances, A.nom_alliance devrait avoir le même résultat... puisque ton LEFT JOIN doit aboutir à rune table du genre :

A.nom_alliance A.id_alliance (= M.id_alliance) M.points


RE: Soucis classement alliance - Roworll - 24-08-2007

Citation :Je suis étonné, tu peux mettre "alliances A" au lieu de "alliances AS A" ? (idem pour membres et M)
Oui, le AS est optionnel pour les alias (enfin,faut voir avec le moteur).

Histoire de faire plus propre, je ferai aussi le GROUP BY sur nom_alliance.
Je me passerai aussi du LEFT JOIN (a moins que les alliances sans joueurs doivent apparaître).

En gros, ça donnerai :
Code PHP :
<?php 
$requete
= "SELECT nom_alliance, sum(membres.points) as points_alliance FROM alliances, membres WHERE membres.id_alliance = alliance.id_alliance GROUP BY nom_alliance";
Si le résultat ne correspond pas à tes attentes, vérifie bien la relation et les enregistrements dans tes deux tables.

Tu as peut être des doublons dans la table membres.


RE: Soucis classement alliance - uriak - 24-08-2007

faire le GROUP BY sur un champ texte comme nom_alliance n'est-il pas plus long que sur un id ?


RE: Soucis classement alliance - Roworll - 24-08-2007

Niveau performances, je ne sais pas vraiment.
C'est juste au niveau syntaxique.
Dans MySQL, ceci
Code :
SELECT champ1, sum(champ2) from table1 group by champ3
est autorisé et ce même si champ1 contient plusieurs valeurs pour champ3. La valeur affichée sera définie par le moteur.
Cette même syntaxe en Oracle ou SQL Server est incorrecte car champ1 n'est pas dans le group by.


RE: Soucis classement alliance - uriak - 24-08-2007

ok mais il pourrait faire SELECT A.id_alliance, nom_alliance, sum(..) .... GROUP BY A.id_alliance Wink


RE: Soucis classement alliance - combo - 24-08-2007

Salut,

Merci pour vos réponses.

Je viens de modifier ma requête de tel sorte :

Code PHP :
<?php 
$requete
= "SELECT nom_alliance, sum(membres.points) as points_alliance FROM alliances, membres WHERE membres.id_alliance = alliance.id_alliance GROUP BY nom_alliance";

Seulement il m'affiche :

SELECT nom_alliance, sum(membres.points) as points_alliance FROM alliances, membres WHERE membres.id_alliance = alliance.id_alliance GROUP BY nom_alliance : Column 'nom_alliance' in field list is ambiguous


RE: Soucis classement alliance - Roworll - 24-08-2007

Apparemment, nom_alliance est dans les deux tables.
Utilises alors alliance.nom_alliance dans le SELECT et le GROUP BY.

(au passage, pas faux Uriak ^^)