Requête MySQL count sur plusieurs champs

Fermé
w00t w00t - 21 févr. 2012 à 07:10
AssassinTourist Messages postés 5709 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 - 21 févr. 2012 à 09:51
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 5709 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 310
21 févr. 2012 à 09:04
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
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 5709 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 310
Modifié par AssassinTourist le 21/02/2012 à 09:15
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
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 5709 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 310
Modifié par AssassinTourist le 21/02/2012 à 09:18
Ok =)
Tu veux quelle solution au final ? La première ou la deuxième ?
0
La première me semble la plus logique
0
Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
21 févr. 2012 à 09:34
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 5709 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 310
Modifié par AssassinTourist le 21/02/2012 à 09:48
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 5709 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 310
Modifié par AssassinTourist le 21/02/2012 à 09:51
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
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