JeuWeb - Crée ton jeu par navigateur
Impossible de faire fonctionner mon GROUP BY... - 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 : Impossible de faire fonctionner mon GROUP BY... (/showthread.php?tid=7823)



Impossible de faire fonctionner mon GROUP BY... - MeTaLLiQuE - 14-06-2017

Hello,

Je ne sais pas si c'est à cause de la chaleur écrasante ou quoi... Mais... Je n'arrive pas à faire fonctionner mon GROUP BY avec ma jointure.

Je m'explique, je dois lister tous les espions du joueur en regroupant les espions qui sont envoyés sur un même joueur.

Par exemple, si j'ai 2 espions chez X et 1 chez Y, il faut que les deux espions chez X soient groupés afin de n'afficher qu'une seule ligne.

J'utilise donc le code suivant :

Code :
SELECT e.id_action,COUNT(e.*) AS nb,u.pseudo FROM espionnage AS e
            INNER JOIN users AS u ON u.id=e.id_cible
WHERE e.id_user= :id_user GROUP BY e.id_cible

Le code tel quel ne fonctionne pas, mais si je supprime le "e.id_action" le code fonctionne... (pareille si je mets autre chose, e.id ou autre, ça ne fonctionne pas)

Où aurais-je fait une erreur ? u_u"

Merci d'avance,


RE: Impossible de faire fonctionner mon GROUP BY... - Xenos - 14-06-2017

e.id_cible ou e.id_action comme colonne 1? Car sélectionner des colonnes variables non issues des groupings sans utiliser de fonction de grouping dessus (ie: sélectionner les colonnes B et MAX© quand tu groupes sur A) n'a pas beaucoup de sens car B aura une valeur quelconque (et MySQL 5.7 strict l'interdit même je crois)

Code :
SELECT
    e.id_cible,
    COUNT(*) AS nb,
    u.pseudo
FROM espionnage AS e
INNER JOIN users AS u ON u.id=e.id_cible
WHERE e.id_user= ?
GROUP BY e.id_cible



RE: Impossible de faire fonctionner mon GROUP BY... - MeTaLLiQuE - 14-06-2017

Ouais pas pensé --'

J'ai repensé mon système est ça fonctionne parfaitement maintenant Wink

J'ai enlevé id_action et j'utilise l'id de l'user à la place

Code :
SELECT e.id_cible,COUNT(e.id_espion) AS nb,u.pseudo FROM espionnage AS e
   INNER JOIN users AS u ON u.id=e.id_cible
WHERE e.id_user= :id_user GROUP BY e.id_cible

Merci de ta réponse Smile


RE: Impossible de faire fonctionner mon GROUP BY... - Ter Rowan - 14-06-2017

et surtout qu'est ce que tu appelles grouper ?
tu veux connaitre le nombre d'espions par joueur :

joueur 1 / 3
joueur 2 / 1
dans ce cas un truc du genre :
Code :
SELECT u.pseudo , COUNT(e.*) AS nb FROM espionnage AS e
           INNER JOIN users AS u ON u.id-du joueur-=e.id-du joueur
GROUP BY u.id-du joueur


ou avoir tous les espions sur une ligne ?
joueur 1 / sp1 / sp2 / sp3
joueur 2 / sp 4

mais c est clair qu'il faudrait connaitre l'objectif et connaitre les champs des deux tables comme demande xenos
là j ai l impression que tu veux faire un truc plus compliqué que le simple comptage

edit : ah ben répondu


RE: Impossible de faire fonctionner mon GROUP BY... - MeTaLLiQuE - 14-06-2017

En faite, ce que je voulais c'est :

Dresser une liste des joueurs où il y a la présence d'au moins un de mes espions et puis la colonne d'à côté, spécifier le nombre d'espions présents sur ledit domaine.

Mais l'erreur comme l'a dit Xenos précédemment, c'est que je sélectionnais en fait, une colonne qui ne rentrait pas dans le contexte du GROUP

PJ : Capture du résultat final