Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Débuter
Débuter Forum d'entraide pour débuter avec 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 17/12/2011, 17h49   #1
Invité de passage
 
Homme Stéphane
Consultant en virtualisation
Inscription : avril 2008
Messages : 8
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Consultant en virtualisation
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 8
Points : 1
Points : 1
Envoyer un message via MSN à sumfvm
Par défaut Somme des post du forum dont les sujets sont issus

Bonjour,

Voici un problème que je pense trivial mais sur lequel je butte depuis deux jours :

J'ai une base composée de 2 tables :

Forum(idForum, nomForum)
Post(idPost, titrePost, contenu, forumID)

Pas de souci pour afficher tous les champs qui m'intéresse dans la table Post et formater le résultat en HTML mais mon souci c'est que je veux afficher sur cette même sortie le total des post présent dans un forum.

Sachant que l'affichage des messages est conditionné par un :
Code :
WHERE p.idPost = '.$_GET['id']
Je me doute bien que je vais devoir faire une jointure mais je n'y arrive pas...

En somme, je me casse la tête pour afficher la somme des posts du forum dont les sujets sont issus...

D'avance merci.
sumfvm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2011, 22h17   #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
Le cours sur les ensembles est fait pour toi !
__________________
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 déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2011, 14h10   #3
Invité de passage
 
Homme Stéphane
Consultant en virtualisation
Inscription : avril 2008
Messages : 8
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Consultant en virtualisation
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 8
Points : 1
Points : 1
Envoyer un message via MSN à sumfvm
Merci beaucoup, ce cours est très complet mais je butte encore car la requête est ok quand :

Code :
1
2
3
SELECT COUNT(idForum) AS Nombre, titrePost
FROM Post
GROUP BY idForum
Ca me retourne bien le nombre de post du forum donné.

Mon problème est que mes sujets sont listés sur une page et les liens générés contiennent une variable dans l'URL (via $_GET) et quand j'affiche et je formate le post je m'appuie sur cette variable (idPost) or quand je l'inclus dans ma requête :

Code :
1
2
3
4
SELECT COUNT(idForum) AS Nombre, titrePost
FROM Post
WHERE idPost = '.$_GET['id']
GROUP BY idForum
cela ne me retourne qu'une seule ligne qui ne contient évidemment que l'id du forum auquel cette entrée est liée...

Il y a quelque chose que je ne saisis pas...

Mais merci de ton aide qui m'a bien éclairé sur les ensembles !
sumfvm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2011, 14h34   #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
Citation:
Envoyé par sumfvm Voir le message
la requête est ok quand :

Code :
1
2
3
SELECT COUNT(idForum) AS Nombre, titrePost
FROM Post
GROUP BY idForum
Ca me retourne bien le nombre de post du forum donné.
Euh... elle est quand même un peu mal foutue !
Là tu sélectionnes le nombre d'idforum et le titre du post (lequel ?) en groupant pas idForum.
N'importe quel autre SGBD meilleur que MySQL aurait retourné une belle erreur car toutes les colonnes du SELECT ne faisant pas l'objet d'une fonction de regroupement doivent figurer dans le GROUP BY. Tu te serais alors rendu compte que ta requête devrait plutôt être celle-ci :
Code :
1
2
3
SELECT idForum, COUNT(*) AS Nombre
FROM Post
GROUP BY idForum
Citation:
Mon problème est que mes sujets sont listés sur une page et les liens générés contiennent une variable dans l'URL (via $_GET) et quand j'affiche et je formate le post je m'appuie sur cette variable (idPost) or quand je l'inclus dans ma requête :

Code :
1
2
3
4
SELECT COUNT(idForum) AS Nombre, titrePost
FROM Post
WHERE idPost = '.$_GET['id']
GROUP BY idForum
cela ne me retourne qu'une seule ligne qui ne contient évidemment que l'id du forum auquel cette entrée est liée...
Évidemment, cette fois tu ne demandes qu'un seul post (et pas un forum !) donc tu n'as qu'une seule ligne en résultat.

Tu peux donner un exemple pour mieux expliquer ce que tu cherches à obtenir ?
__________________
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 déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2011, 15h30   #5
Invité de passage
 
Homme Stéphane
Consultant en virtualisation
Inscription : avril 2008
Messages : 8
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Consultant en virtualisation
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 8
Points : 1
Points : 1
Envoyer un message via MSN à sumfvm
Forum 1
Forum 2
Quand je clique sur un lien le contenu du sujet s'affiche et en pied de page est indiqué le nombre de sujets dans le forum auquel est rattaché le sujet (champs idForum dans la table Post), ici 4 sujets dans le forum 1 et 2 sujets dans le forum 2, et je filtre donc par idPost puisque c'est l'id que je récupère via la variable dans l'url.

Désolé de ne pas être clair, je suis vraiment un profane et encore merci de te pencher sur mon cas.
sumfvm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2011, 16h52   #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
OK. Donc par exemple en cliquant sur le Sujet 7 tu récupères l'id du sujet 7 et tu veux afficher le nombre de sujets dans le forum du sujet 7.
Code :
1
2
3
4
5
6
7
SELECT COUNT(*) AS Nombre_sujets
FROM post
WHERE id_forum = (
	SELECT id_Forum
	FROM post
	WHERE id_Post = 7
)
Traduction de la requête :
Compter le nombre de sujets de la table post pour lesquels l'id_forum est celui du sujet 7.

Ai-je bien compris que post = sujet ?
__________________
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 déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/12/2011, 17h23   #7
Invité de passage
 
Homme Stéphane
Consultant en virtualisation
Inscription : avril 2008
Messages : 8
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Consultant en virtualisation
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 8
Points : 1
Points : 1
Envoyer un message via MSN à sumfvm
C'est exactement ça et ta requête fonctionne parfaitement !

Merci mille fois, j'avoue que je n'aurai pas trouvé seul...

En fait, je ne savais pas qu'on pouvait écrire :

Code :
1
2
3
4
5
WHERE id_forum = (
	SELECT id_Forum
	FROM post
	WHERE id_Post = 7
)
Cette "méthode" porte un nom ?

Quoiqu'il en soit, merci à toi et bonne fin de journée.
sumfvm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2011, 17h51   #8
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
Citation:
Envoyé par sumfvm Voir le message
En fait, je ne savais pas qu'on pouvait écrire :

Code :
1
2
3
4
5
WHERE id_forum = (
	SELECT id_Forum
	FROM post
	WHERE id_Post = 7
)
Cette "méthode" porte un nom ?
C'est tout simplement une "sous-requête" dans le WHERE.
__________________
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 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 19h55.


 
 
 
 
Partenaires

Hébergement Web