Bonjour,
Je me casse un peu la tête sur une requête
Je voudrais en une seule requête récupérer des stats utilisateurs.
Imaginons qu'un utilisateur puisse avoir des albums photos, des albums vidéos.
Chaque table associée possède un view_count et un comment_count.
Je veux récupérer le nombre d'albums photos, le nombre d'albums vidéos, ainsi que le cumul total du nombre de vues tout confondu et le cumul total du nombre de commentaires tout confondu.
Admettons les données suivantes :
user_id = 2
1 album photo avec 5 vues | 0 com
3 albums vidéos avec :
- 15 vues | 2 com
- 4 vues | 3 com
- 12 vues | 0 com
Voici un début de requête :
Le pb c'est que comme j'ai 3 albums vidéos, le nombre de vues de l'album photo va être compté 3x et au lieu d'avoir un viewCount égal à 36 (5+15+4+12), j'aurais le viewCount égal à 46 (5+5+5 +15+4+12).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 SELECT u . * , COUNT( DISTINCT pa.id ) AS photoAlbumCount, COUNT( DISTINCT ma.id ) AS movieAlbumCount, ( SUM( COALESCE( pa.view_count, 0 ) ) + SUM( COALESCE( ma.view_count, 0 ) ) ) AS viewCount, ( SUM( COALESCE( pa.comment_count, 0 ) ) + SUM( COALESCE( ma.comment_count, 0 ) ) ) AS commentCount FROM users u LEFT JOIN photo_albums pa ON pa.user_id = u.id LEFT JOIN movie_albums ma ON ma.user_id = u.id WHERE u.id = 2;
Je sais pas si c'est possible de remédier à ça via MySQL uniquement
Des idées ?
Merci,
A+ benjamin.
Partager