Dans un CMS fait maison, j'ai une page qui affiche la liste des articles, et dans cette page il y a un select pour pouvoir filtrer par catégorie.
Et dans ce select, j'affiche entre des parenthèses le nombre d'articles que chaque catégorie contient.
Voici en image : http://www.creerwebsite.com/medias/uplo ... _testp.png
Voici mon Code actuel:
HTML:
Code : Tout sélectionner
<form id="form-categories" action="#" method="get">
<select onchange="document.getElementById('form-categories').submit();" name="categorie">
<?php
// ** req SQL SELECT pour récup liste des catégories **
$data = $categorieArticle->selectListeCategories();
foreach($data as $data_cat) {
// ** req SQL COUNT pour afficher nombre d'articles par catégorie (entre les parenthèse, dans <select>) **
$data_count = $article->nbArticlesParCategorie($data_cat->id);
echo '<option value="'.$data_cat->id.'">'.$data_cat->nom.' ('.$data_count.')</option>';
}
?>
</select>
</form>
Code : Tout sélectionner
<?php
/**
* Requete SQL SELECT pour récupérer la liste des catégories
*/
public function selectListeCategories()
{
$sql = "SELECT *
FROM ".$this->_tableCategoriesArticles."";
$requete = self::getDb()->prepare($sql);
$requete->execute();
$requete->setFetchMode(PDO::FETCH_OBJ);
return $requete;
/*
$this->_tableCategoriesArticles : Est ma table où il y a mes catégories (que je peut relier à mes articles)
*/
}
Code : Tout sélectionner
<?php
/**
* Requete SQL SELECT COUNT pour affiher le nombre d'articles par catégorie (entre les parenthèse, dans <select>)
*/
public function nbArticlesParCategorie($id_cat)
{
$sql = "SELECT COUNT(*) as nb
FROM ".$this->_tableArticles."
INNER JOIN ".$this->_tableCategoriesJointesArticles."
ON ".$this->_tableArticles.".id = ".$this->_tableCategoriesJointesArticles.".id_article";
"WHERE ".$this->_tableCategoriesJointesArticles.".id_categorie = :id_cat";
$requete = self::getDb()->prepare($sql);
$requete->bindValue(':id_cat', $id_cat);
$requete->execute();
$result = $requete->fetch(PDO::FETCH_OBJ);
$requete->closeCursor();
return (int) $result->nb;
}
/*
$this->_tableArticles : Est ma table où il y a mes articles
$this->_tableCategoriesJointesArticles : Est ma table intermédaire, qui relie ma table articles à ma table categories
*/
Donc j'aimerai bien utiliser un "GROUP BY";
Voici mon nouveau code que je n'arrive pas à faire fonctionner:
Code : Tout sélectionner
<?php
/**
* Avec ce code, je souhaite à la fois récupérer la liste des catégories,
* et aussi afficher le nombre d'article que cette catégorie contient
*/
public function selectListeCategories()
{
$sql = "SELECT ".$this->_tableCategoriesArticles.".id, ".$this->_tableCategoriesArticles.".nom , COUNT(*) as nb_article
FROM ".$this->_tableCategoriesArticles."
INNER JOIN ".$this->_tableCategoriesJointesArticles."
ON ".$this->_tableCategoriesArticles.".id = ".$this->_tableCategoriesJointesArticles.".id_article
GROUP BY ".$this->_tableCategoriesArticles.".id";
$requete = self::getDb()->prepare($sql);
$requete->execute();
$requete->setFetchMode(PDO::FETCH_OBJ);
return $requete;
}
Merci beaucoup.