Requete de classement SQL sur trois tables avec SUM, COUNT..
17 messages
• Page 1 sur 2 • 1, 2
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
-

nickargall - WRInaute accro

- Messages: 5603
- Inscription: Lun Juin 13, 2005 14:13
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: 5603
- Inscription: Lun Juin 13, 2005 14:13
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
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: 5603
- Inscription: Lun Juin 13, 2005 14:13
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é
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: 5603
- Inscription: Lun Juin 13, 2005 14:13
@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: 5603
- Inscription: Lun Juin 13, 2005 14:13
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.
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: 5603
- Inscription: Lun Juin 13, 2005 14:13
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: 5603
- Inscription: Lun Juin 13, 2005 14:13
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: 5603
- Inscription: Lun Juin 13, 2005 14:13
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
Formation recommandée sur ce thème :
Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Requete SQL sur 2 tables
- SQL Requête dans plusieurs tables
- Problème avec requête SQL multiple (3 tables) et comptage
- Requête SQL pour connexion entre 3 tables liées..
- Problème de $count dans un classement
- gestion tables sql
- Column count doesn't match value count at row 1
- Requete 2 tables
- Requête sur deux tables
- Passer deux tables SQL en une
- Tables SQL disparues chez OVH
- Grouper les tables SQL comme Freeglobes
- Passage de tables sql en flux xml locatif ?
- [SQL]Verifier la presence d'une entrée dans plusieurs tables
- Outil SQL pour export de tables sur des bases différentes
- Google API : guide de développement de l'API Google
- Classement Xiti/1ère Position des outils de recherche en France - Août 2002
- AdSense Tracking : statistiques détaillées sur les clics AdSense
- Nombre moyen de mots par requête : statistiques AOL Août 2006
- Classement Interbrand 2006 : la percée de Google
- Listes des requêtes les plus populaires du moment
- Nombre de clics dans les pages de résultats : statistiques AOL Août 2006
- Classement Xiti/1ère Position des outils de recherche en France - Juillet 2002
- Google au 4eme rang mondial en nb de visites
- Informations sur l'infrastructure technique de Google
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é
