Requête MySQL count sur plusieurs champs

w00t w00t -  
AssassinTourist Messages postés 6029 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je suis en train de me faire une petite page php, pour gérer les records de mon alliance sur un jeu. J'ai une base SQL avec les champs type, joueur1, joueur2. joueur3.

Pour chaque troupe qu'on peut obtenir dans le jeu, je liste le record (qui en a le plus) et je peux donc avoir jusqu'à 3 personnes qui partagent ce record.

Exemple à la con :
type | joueur1 | joueur2 | joueur3
record 1 | toto | - | -
record 2 | tata | toto | -
record 3 | albert | - | -
record 4 | albert | tata | toto

Si je veux me faire une requête d'un top 3 des joueurs qui ont le plus de records, quelle requête je pourrais faire ? J'ai essayé quelques manips avec des COUNT mais je n'arrive pas à mes fins :(
Si quelqu'un sait comment faire, ça m'arrangerait vraiment beaucoup !

5 réponses

AssassinTourist Messages postés 6029 Date d'inscription   Statut Contributeur Dernière intervention   1 312
 
Bonjour,

Pouvez-vous nous dire ce que vous avez tenté pour vos count ?

Sinon, moi je verrais bien de faire ça en deux temps :
- d'abord en récupérant le score de tout le monde avec un tableau nom | count(resultat), en SQL
- puis en récupérant dans un second temps en php le meilleur score (qui peut être partagé donc on met ça dans un tableau)
0
w00t w00t
 
Je galère depuis deux heures là-dessus, honnêtement je ne sais plus trop ce que j'ai testé, beaucoup beaucoup de choses... Je suis en train de lire de la doc pour faire des JOIN, mais n'ayant jamais utilisé ça encore, je patauge, je patauge...

EDIT : J'ai réussi à le faire pour une colonne, pas très difficile dans l'absolu :
SELECT joueur1, COUNT(joueur1) AS nbjoueur1 FROM sandbox GROUP BY joueur1 ORDER BY nbjoueur1 DESC LIMIT 0,10

Mais pour gérer les 2 autres colonnes, alors là je sèche !
0
AssassinTourist Messages postés 6029 Date d'inscription   Statut Contributeur Dernière intervention   1 312
 
Et ma solution ne te convient pas ?

Tu peux sinon, faire une première requête sql pour avoir le resultat maximum, puis après faire une requête avec un where resultat = maximum
0
w00t w00t
 
Ce n'est pas qu'elle ne me convient pas, c'est que je ne vois pas comment faire pour le moment :) Je fais des requêtes MySQL assez basiques jusqu'ici, et autant je comprends le principe que tu exposes, autant pour le mettre en application, je ne sais pas comment faire pour le moment.
0
AssassinTourist Messages postés 6029 Date d'inscription   Statut Contributeur Dernière intervention   1 312
 
Ok =)
Tu veux quelle solution au final ? La première ou la deuxième ?
0
w00t w00t
 
La première me semble la plus logique
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Il y a certainement possibilité de le faire en une requête avec du select du max des sum de count.

Mais mieux vaut le faire en 2 temps ;-)
0
AssassinTourist Messages postés 6029 Date d'inscription   Statut Contributeur Dernière intervention   1 312
 
Bonjour,

Pour faire le count sur tes trois colonnes, peut-être essayer la solution de Toxine sur ce post => https://forums.commentcamarche.net/forum/affich-9023738-sql-count-distinct-sur-2-champs

select count(*) from ma_table 
WHERE siren IN (select distinct siren from ma_table) 
AND nic IN (select distinct nic from ma_table) 


Enfin... partir de là.
0
AssassinTourist Messages postés 6029 Date d'inscription   Statut Contributeur Dernière intervention   1 312
 
Sinon peut-être avec INNER JOIN :

SELECT count(*)   
FROM sandbox  s1 
INNER JOIN sandbox s2 on s2.joueur2 = s1.joueur1 
INNER JOIN sandbox s3 on s3.joueur3 = s1.joueur1
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
w00t w00t
 
Je continue mes recherches et mes tests, merci pour les pistes :) Si j'arrive à quelque chose de fonctionnel, je posterai ça ici, ça peut servir pour d'autres !
0