Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/12/2011, 09h56   #1
Candidat au titre de Membre du Club
 
Inscription : novembre 2006
Messages : 35
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 35
Points : 11
Points : 11
Par défaut Classement des meilleurs resultats

Bonjour,

Prenons le cas d'un site hébergeant plusieurs forum , je voudrai extraire les 3 forums ayant le plus d'activité.
On suppose une table forum, une table user rattachée au forum qu'il créé, et une table post rattachée au forum.

Ce qui nous amène a faire une sorte de moyenne où l'on diviserai le nombre de post par le nombre d'utilisateur.

EXEMPLE:

Forum 1 : 25 post, 250 users => si l'on suis la formule on se retrouve avec un résultat de 0.10
Forum 2 : 250 post, 25 users => 10
Forum 3 : 18 post, 78 users =>0.23
Forum 4 : 58 post, 2 users => 29
Forum 5 : 65 post, 45 users =>1.44
Forum 6 : 89 post, 13 users=> 6.84

Voila ce que je voudrai obtenir :
On afficherai donc le nom du forum ayant le meilleur résultat.
1 : Forum4
2 : Forum2
3 : Forum6

Une petite idée pour me mettre sur la piste? Comment rédiger ma requête?
Merci d'avance,

Jerome
jackson67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 10h09   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 333
Points : 18 333
Envoyer un message via MSN à CinePhil
Crée une requête SQL qui va compter le nombre de posts et d'utilisateurs puis en calculer le ratio.

Si tu ne vois pas comment faire, regarde le cours de SQLPro et poste ici ce que tu auras essayé. C'est plus constructif que de te donner la solution toute faite.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/12/2011, 11h41   #3
Candidat au titre de Membre du Club
 
Inscription : novembre 2006
Messages : 35
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 35
Points : 11
Points : 11
Citation:
Envoyé par CinePhil Voir le message
Crée une requête SQL qui va compter le nombre de posts et d'utilisateurs puis en calculer le ratio.

Si tu ne vois pas comment faire, regarde le cours de SQLPro et poste ici ce que tu auras essayé. C'est plus constructif que de te donner la solution toute faite.
Oui merci, je n'attend pas de réponse toute faite mais juste encore une précision...
Est-ce que je peux extraire les résultats directement en SQL ou il va falloir faire des opérations en PHP?
jackson67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 12h18   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 333
Points : 18 333
Envoyer un message via MSN à CinePhil
Une seule requête SQL devrait pouvoir te sortir la liste des forum dans l'ordre souhaité. Tu ajouteras les numéros de classement en PHP à la présentation des résultats, ce sera plus simple.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 14h44   #5
Candidat au titre de Membre du Club
 
Inscription : novembre 2006
Messages : 35
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 35
Points : 11
Points : 11
Voir ci dessous...
Pourquoi ai-je le meme nombre dans a1 et dans a2?
Je suis surement sur la mauvaise piste :/

Code :
1
2
3
4
5
6
7
8
SELECT count(sujet.id_sujet) as a1, count(post.id_post)  AS a2, `forum`.`nom_foum`, count(sujet.id_sujet)/count(post.id_post) as a3
FROM  `sujet`
       INNER JOIN `forum` ON `forum`.`id_forum` = `sujet`.`id_ref_forum`
       INNER JOIN `post` ON `post`.`id_ref_sujet` = `sujet`.`id_sujet`
 
GROUP BY `forum`.`nom_forum`
order by a3 ASC
LIMIT 3
jackson67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 14h50   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 333
Points : 18 333
Envoyer un message via MSN à CinePhil
Comme tu fais une jointure entre plusieurs tables, tu te retrouves avec ce genre de jeu de résultat :
id_sujet / id_post
1 / 1
1 / 2
1 / 3
2 / 4
2 / 5
2 / 12
3 / 6
3 / 8

Pour ne pas compter un sujet plusieurs fois, il faut ajouter DISTINCT au COUNT :
Code SQL :
1
2
3
4
5
6
7
8
9
10
SELECT count(DISTINCT sujet.id_sujet) AS a1, 
	count(post.id_post)  AS a2, 
	forum.nom_forum, 
	count(DISTINCT sujet.id_sujet)/count(post.id_post) AS a3
FROM  sujet
INNER JOIN forum ON forum.id_forum = sujet.id_ref_forum
INNER JOIN post ON post.id_ref_sujet = sujet.id_sujet
GROUP BY forum.nom_forum
ORDER BY a3 ASC
LIMIT 3
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 15h06   #7
Candidat au titre de Membre du Club
 
Inscription : novembre 2006
Messages : 35
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 35
Points : 11
Points : 11
c'est mieux sauf que j'aimerai qu'il compte le nombre de sujet au total dans le count est-ce possible?
jackson67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 15h35   #8
Candidat au titre de Membre du Club
 
Inscription : novembre 2006
Messages : 35
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 35
Points : 11
Points : 11
En fait, du fait des inner join il recupere uniquement les sujet ayant des posts alors qu'il me faut le nombre total de sujet.
sur ce coup la j'ai plus trop d'idées
jackson67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 15h59   #9
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 333
Points : 18 333
Envoyer un message via MSN à CinePhil
Si tu veux tous les sujets, même ceux qui n'ont pas de post, il te faut une jointure externe :
Code SQL :
1
2
3
4
5
6
7
8
9
10
SELECT count(DISTINCT sujet.id_sujet) AS a1, 
	count(post.id_post)  AS a2, 
	forum.nom_forum, 
	count(DISTINCT sujet.id_sujet)/count(post.id_post) AS a3
FROM  sujet
INNER JOIN forum ON forum.id_forum = sujet.id_ref_forum
LEFT OUTER JOIN post ON post.id_ref_sujet = sujet.id_sujet
GROUP BY forum.nom_forum
ORDER BY a3 ASC
LIMIT 3
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 16h11   #10
Candidat au titre de Membre du Club
 
Inscription : novembre 2006
Messages : 35
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 35
Points : 11
Points : 11
LE problème semble reglé.
Merci de m'avoir mis sur la voie!
jackson67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h41.


 
 
 
 
Partenaires

Hébergement Web