Bonjour !

Je me casse la tête sur cette requête depuis ce matin et j'aimerai un coups de main d'experts qui traineraient dans le coin par le plus grand des hasards.... si possible.

Le but : pour faire un classement d'utilisateurs je compte les divers éléments qu'ils on postés (media, article, xxx....) pour en faire la somme et alors faire le tri

Et c'est au niveau de la récupération des lignes
user, sum (count(media), coun (article), count (xxx)) que je bloque

La requète la plus aboutie que j'ai jusque la c'est
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
SELECT u.id, COUNT(m.id) as media_count, COUNT(a.id) as article_count, COUNT(xx.id) as xxx_count 
FROM `user` AS u
    LEFT JOIN `media` AS m ON m.`_created_by` = u.`id`
    LEFT JOIN `article` AS a ON a.`_created_by` = u.`id`
    LEFT JOIN `xxx` AS xx ON xx.`_created_by` = u.`id`
GROUP BY u.id
Avec ca je peux faire la somme puis le tri en PHP mais je trouve dommage de ne pas utiliser les capacité de mysql puisqu'il peut le faire.

Apres cette requète dès que je passe par des sous requète renvoyant "value" pour faire la somme des "value" j'ai ou un résultat unique ou une erreur sql...

Y'a t'il une bonne âme pour m'aider siouplait ?

Merci d'avance

PS : en fait meme cette requète retourne de mauvais résultats



Re ps : j'ai fini par y arriver !
A croire que le forum inspire meme sans l'aide des autres utilisateurs !

Voici ma requète finale
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SET @position = 0;
 
SELECT u.id, (
   SELECT COUNT( m.id )
   FROM `media` m
   WHERE m.`_created_by` = u.id
) + (
   SELECT COUNT( a.id )
   FROM `article` a
   WHERE a.`_created_by` = u.id 
) + (
   SELECT COUNT( xx.id )
   FROM `xxx` xx
   WHERE xx.`_created_by` = u.id ) AS sum, 
@position := @position +1 AS 'position'
FROM `user` AS u
   LEFT JOIN `xxx` AS xx ON xx.`_created_by` = u.`id`
   LEFT JOIN `article` AS a ON a.`_created_by` = u.`id`
   LEFT JOIN `media` AS m ON m.`_created_by` = u.`id`
GROUP BY u.id
ORDER BY sum DESC