Requete de classement SQL sur trois tables avec SUM, COUNT..
17 messages
• Page 1 sur 2 • 1, 2
-

nickargall - WRInaute accro

- Messages: 6468
- Inscription: 13 Juin 2005
Requete de classement SQL sur trois tables avec SUM, COUNT..
Bonsoir à tous
Je suis pas fortiche en SQL et j'ai besoin de vos lumières.
J'ai, dans une table PRONO, les champs suivant qui m'intéressent :
| points | id_user |
5 1
5 1
10 2
50 2
Dans une table USER, les champs suivant :
id_user | pseudo
1 POPOL
2 LULU
Et une troisième table MESSAGES qui recense les messages postés sur mon forum par les membres :
j'y ai notamment les champs suivants :
id_message | nom ..
1 LULU
2 LULU
3 POPOL
4 LULU
Dans un premier temps, j'ai voulu sortir le classement des [user.nom] en fonction du total des [prono.points]. J'ai donc mis en place une requête SQL :
et ca fonctionne très bien.
Maintenant la complication :
Je voudrais pouvoir également classer les [user.nom] en fonction du total des [prono.points] descendant ET du nombre total de [messages.id_message] qui lui correspondent.
J'ai donc "bêtement" tenté de rajouter un COUNT(messages.id_message) d'un coté et un WHERE messages.nom=user.pseudo de l'autre :
Mais bon ca le fait pas du tout. Mon total de SUM(points) correspond pas du tout à ce que je voudrais, ni mon COUNT(id_message) non plus d'ailleurs.
D'ou ma question : avec les données indiquées ci dessus, comment obtenir un classement des user.pseudo selon la somme de points Descendante et le nombre de id_messages descendant ?
Merci à celui qui me dira : "C'est pas compliqué, essaie plutôt comme ça "
Je suis pas fortiche en SQL et j'ai besoin de vos lumières.
J'ai, dans une table PRONO, les champs suivant qui m'intéressent :
| points | id_user |
5 1
5 1
10 2
50 2
Dans une table USER, les champs suivant :
id_user | pseudo
1 POPOL
2 LULU
Et une troisième table MESSAGES qui recense les messages postés sur mon forum par les membres :
j'y ai notamment les champs suivants :
id_message | nom ..
1 LULU
2 LULU
3 POPOL
4 LULU
Dans un premier temps, j'ai voulu sortir le classement des [user.nom] en fonction du total des [prono.points]. J'ai donc mis en place une requête SQL :
- Code: Tout sélectionner
SELECT SUM(points), prono.id_user, user.pseudo FROM prono,user WHERE user.id_user=prono.id_user GROUP BY id_user ORDER BY SUM(points) DESC
et ca fonctionne très bien.
Maintenant la complication :
Je voudrais pouvoir également classer les [user.nom] en fonction du total des [prono.points] descendant ET du nombre total de [messages.id_message] qui lui correspondent.
J'ai donc "bêtement" tenté de rajouter un COUNT(messages.id_message) d'un coté et un WHERE messages.nom=user.pseudo de l'autre :
- Code: Tout sélectionner
SELECT SUM(points), COUNT(messages.id_message), prono.id_user, user.pseudo FROM prono,user, messages WHERE messages.nom=user.nom AND user.id_user=prono.id_user GROUP BY id_user ORDER BY SUM(points) DESC
Mais bon ca le fait pas du tout. Mon total de SUM(points) correspond pas du tout à ce que je voudrais, ni mon COUNT(id_message) non plus d'ailleurs.
D'ou ma question : avec les données indiquées ci dessus, comment obtenir un classement des user.pseudo selon la somme de points Descendante et le nombre de id_messages descendant ?
Merci à celui qui me dira : "C'est pas compliqué, essaie plutôt comme ça "
-

nickargall - WRInaute accro

- Messages: 6468
- Inscription: 13 Juin 2005
Ouaip, une coquille du mec qui a créé la base de données à l'origine
bon ok c'est moi, je l'avoue
bon ok c'est moi, je l'avoue
-

YoyoS - WRInaute accro

- Messages: 3835
- Inscription: 14 Sep 2006
Si je pouvais avoir le code exporté de la structure de tes tables et quelques données je me donnerais à cœur joie pour tester
La j'ai pu faire que ça mais il y a de grandes chances que ça ne marche pas
Pas trop envie de réfléchir, donc si je pouvais tester
La j'ai pu faire que ça mais il y a de grandes chances que ça ne marche pas
- Code: Tout sélectionner
SELECT SUM(p.points) as pts,COUNT(m.*) as nbMess,p.id_user, u.nom
FROM prono p,user u,messages m
WHERE u.id_user = p.id_user AND u.nom = m.nom
GROUP BY p.id_user,u.nom
ORDER BY pts DESC,nbMess DESC;
Pas trop envie de réfléchir, donc si je pouvais tester
-

nickargall - WRInaute accro

- Messages: 6468
- Inscription: 13 Juin 2005
merci de l'essai ... non transformé
Après quelques corrections, j'obtiens les mêmes résultats que la requête que j'ai tenté.
mais merci d'avoir essayé
- Code: Tout sélectionner
SELECT SUM( p.points ) AS pts, COUNT( m.id_message ) AS nbMess, p.id_user, u.pseudo
FROM prono p, user u, messages m
WHERE u.id_user = p.id_user
AND u.pseudo = m.nom
GROUP BY p.id_user, u.nom
ORDER BY pts DESC , nbMess DESC
mais merci d'avoir essayé
- oxado
- Nouveau WRInaute

- Messages: 35
- Inscription: 24 Nov 2005
Quelque chose comme:
non?
Jacques.
- Code: Tout sélectionner
select sum_points,count_messages,id_user,user_pseudo from (SELECT SUM(points) as sum_points, prono.id_user, user.pseudo AS user_pseudo FROM prono,user WHERE user.id_user=prono.id_user GROUP BY id_user) s1,(SELECT messages.nom,count(*), prono.id_user FROM messages GROUP BY nom) s2 WHERE user_pseudo=nom
non?
Jacques.
-

nickargall - WRInaute accro

- Messages: 6468
- Inscription: 13 Juin 2005
@jacques :
MySQL a répondu:
#1054 - Unknown column 'prono.id_user' in 'field list'
@Yoyos : ma structure de table t'arrive par email
Merci de vos tentatives à tous les deux
MySQL a répondu:
#1054 - Unknown column 'prono.id_user' in 'field list'
@Yoyos : ma structure de table t'arrive par email
Merci de vos tentatives à tous les deux
-

nickargall - WRInaute accro

- Messages: 6468
- Inscription: 13 Juin 2005
oui mais non en fait j'ai rien dit, yoyos a supprimé un message 
Dernière édition par nickargall le Mar Aoû 05, 2008 0:00, édité 2 fois.
-

YoyoS - WRInaute accro

- Messages: 3835
- Inscription: 14 Sep 2006
Teste moi ça, c'est dlabonne ;o
A oui, j'avais supprimé ma réponse, je me suis vite rendu compte que ce n'était pas les bons résultats
- Code: Tout sélectionner
SELECT SUM(p.points) as pts, p.id_user, u.pseudo,
(SELECT COUNT(*)
FROM messages m
WHERE m.nom = u.nom) as nbMess
FROM prono p,user u
WHERE u.id_user = p.id_user
GROUP BY u.id_user
ORDER BY pts DESC,nbMess DESC
A oui, j'avais supprimé ma réponse, je me suis vite rendu compte que ce n'était pas les bons résultats
-

nickargall - WRInaute accro

- Messages: 6468
- Inscription: 13 Juin 2005
YoyoS a écrit:Teste moi ça, c'est dlabonne ;o
- Code: Tout sélectionner
SELECT SUM(p.points) as pts, p.id_user, u.pseudo,
(SELECT COUNT(*)
FROM messages m
WHERE m.nom = u.nom) as nbMess
FROM prono p,user u
WHERE u.id_user = p.id_user
GROUP BY u.id_user
ORDER BY pts DESC,nbMess DESC
A oui, j'avais supprimé ma réponse, je me suis vite rendu compte que ce n'était pas les bons résultats
Aaaaah merci
J'aurais appris qu'on peut faire ça :
- Code: Tout sélectionner
... (SELECT COUNT(*)
FROM messages m
WHERE m.nom = u.nom) as nbMess ...
J'me coucherai moins bête ce soir
-

nickargall - WRInaute accro

- Messages: 6468
- Inscription: 13 Juin 2005
Tu crois qu'un BL émanant d'un site sur le foot aidera ton positionnement sur la thématique des tutoriels totoshop ? 
-

nickargall - WRInaute accro

- Messages: 6468
- Inscription: 13 Juin 2005
Euh en fait ca marche pas a 100%. Il me donne 0 pour le nbMess de id_ser qui devraient en avoir.Fichtre.
Edit : Bon j'ai trouvé l'"erreur" qui se glissait dans la requete que tu proposais. c'était juste au niveau de la requete imbriquée :
(SELECT COUNT(*)
FROM messages m
WHERE m.nom = u.pseudo) as nbMess
au lieu de
(SELECT COUNT(*)
FROM messages m
WHERE m.nom = u.nom) as nbMess
Edit : Bon j'ai trouvé l'"erreur" qui se glissait dans la requete que tu proposais. c'était juste au niveau de la requete imbriquée :
(SELECT COUNT(*)
FROM messages m
WHERE m.nom = u.pseudo) as nbMess
au lieu de
(SELECT COUNT(*)
FROM messages m
WHERE m.nom = u.nom) as nbMess
17 messages
• Page 1 sur 2 • 1, 2
Lectures recommandées sur ce thème :
- [Résolu] PB requete SQL 3 tables + 2 count
- Requete SQL sur 2 tables
- SQL Requête dans plusieurs tables
- Problème de jointure entre deux tables requête SQL
- Problème avec requête SQL multiple (3 tables) et comptage
- Requête SQL pour connexion entre 3 tables liées..
- Mysql sum sur 2 tables
- Problème de $count dans un classement
- Aide requête MySQL avec count
- Formulation d'un requête mysql : MAX, COUNT et GROUP BY
- Google API : guide de développement de l'API Google - 20-09-2002
- Classement Xiti/1ère Position des outils de recherche en France - Août 2002 - 05-09-2002
- AdSense Tracking : statistiques détaillées sur les clics AdSense - 29-02-2004
- Classement Interbrand 2006 : la percée de Google - 01-08-2006
- Nombre moyen de mots par requête : statistiques AOL Août 2006 - 10-08-2006
- Listes des requêtes les plus populaires du moment - 12-04-2006
- Classement Xiti/1ère Position des outils de recherche en France - Juillet 2002 - 01-08-2002
- Nombre de clics dans les pages de résultats : statistiques AOL Août 2006 - 11-08-2006
Consultez la description détaillée des produits ou services de Google suivants : Google Suggest
- Analyser le positionnement d'un site
AgentWebRanking est un logiciel professionnel qui permet d'analyser le positionnement d'un ou plusieurs sites dans plus de 300 moteurs de recherche dans le monde. Vous pouvez ainsi analyser les performances du référencement pour de nombreux mots-clés.
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité
