Bonjour a tous,
Je viens vers vous aujourd'hui pour un petit soucis de jointure.
Je vous explique ; je crée un forum et pour chaque catégorie je voudrais récupérer le nombre de Sujets.
Dans la table forum_categories j'ai un champ id et dans la table forum_sujets j'ai un champ categorie_id .
J'ai essayais plusieurs code mais le dernier est :
$requete = $pdo->query("SELECT forum_categories.*, count(forum_sujets.id) FROM forum_categories, forum_sujets
WHERE forum_categories.id = forum_sujets.categorie_id");
$requete->execute();
foreach ($requete as $categorie){
var_dump($categorie);
}
Mais le résultat est le suivant :
array (size=8)
'id' => string '1' (length=1)
0 => string '1' (length=1)
'name' => string 'Jeux' (length=4)
1 => string 'Jeux' (length=4)
'description' => string 'Du jeux de ouf' (length=14)
2 => string 'Du jeux de ouf' (length=14)
'count(forum_sujets.id)' => string '3' (length=1)
3 => string '3' (length=1)
A la ligne 'count(forum_sujets.id)' => string '3' Il me récupére 3 alors que je n'est que deux sujets liés a cette catégorie.
Pour étre simple ce que je voudrais est :
Mais tous ca avec une seul requete Sql ?
Merci a tous d'avance et bonne fin de journée.
NydalSinvio(Ps : J'ai regardé sur le forum mais aucun des codes trouvés ne fonctionne).
J'ai réussi :p
Voila le code utilisé :
// Récupération de toutes les catégories.
function read_categories($pdo){
$requete = $pdo->query("SELECT * FROM forum_categories ORDER BY id");
$requete->execute();
foreach ($categories as $categorie){
echo "<p>".$categorie['name']."</p> <span>".$categorie['description']."</span>";
echo count_sujets($pdo,$categorie['id']);
}
return $requete;
}
// du nombre de sujet par catégorie.
function count_sujets($pdo,$id){
$requete = $pdo->query("SELECT * FROM forum_sujets WHERE categorie_id = '$id'");
$requete->execute();
$count = $requete->rowCount();
return $count;
}
En tous cas un grand merci de ton aide ! Bon fin de journée
Salut,
Le mieux pour la création d'un forum c'est d'ajouter un champs dans ta table "nb_topics" et "nb_messages" que tu incrémentes a chaque ajout ou suppression de topic/message.
Donc dans la table Categorie j'ajoute un champ nb_sujets et dans la table sujets j'ajoute un champ nb_posts que je change a chaque nouveau ajout / suppretion ? Mais ca va ne va rien changé pour la récupération du dernier message :/
Exacte, pour la récupération du dernier message tu as juste à rajouter un champs "last_message_id" :)
Un exemple de tables sql pour un forum : http://openclassrooms.com/courses/creer-son-forum-de-toutes-pieces/avant-tout-2#/id/r-1401481
C'est une bonne idée mais mes catégorie sont lister de la sorte :
$requete = $pdo->query("SELECT * FROM forum_categories ORDER BY id");
$requete->execute();
foreach ($categories as $categorie){
echo "<p>".$categorie['name']."</p> <span>".$categorie['description']."</span>";
}
Comment faire pour récupérer le dernier sujet de chaque catégorie .. C'est vite compliqué avec le Sql :p
Merci de ton lien mais les cours de OpenClassRoom c'est un vrai bordel est la a part faire une requete de la taille d'une page entiére et des while par ci par la je ne trouve pas la solution..
Pour recuperer le dernier sujet :
Tu fais un max() sur ta cle primaire
GENRE :
SELECT max(id) FROM forum_sujets WHERE categorie_id = '$id'
si tu rajoutes des champs il faut que tu groupes
SELECT max(id),titre FROM forum_sujets WHERE categorie_id = '$id'
group by titre