par
stephweb » 12 oct. 2015, 10:22
Bonjour, je viens demander de l'aide Svp.
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>
PHP (dans ma Classe "CategorieArticle") :
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)
*/
}
PHP (dans ma Classe "Article") :
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
*/
Le problème, avec ce code, si par exemple il y a 50 catégories, ça me fait faire 50 requêtes SQL COUNT…
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;
}
Mais pour le moment ce code, m'affiche uniquement ma liste de catégories, je ne sais pas comment faire avec ce code pour aussi afficher le nombre d'articles que chaque catégorie contient;
Merci beaucoup.
Bonjour, je viens demander de l'aide Svp.
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 : [url]http://www.creerwebsite.com/medias/upload/11-10-2015-22H-32m-50s_testp.png[/url]
Voici mon Code actuel:
HTML:
[code]
<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]
PHP (dans ma Classe "CategorieArticle") :
[code]
<?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]
PHP (dans ma Classe "Article") :
[code]
<?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
*/
[/code]
Le problème, avec ce code, si par exemple il y a 50 catégories, ça me fait faire 50 requêtes SQL COUNT…
Donc j'aimerai bien utiliser un "GROUP BY";
Voici mon nouveau code que je n'arrive pas à faire fonctionner:
[code]
<?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;
}
[/code]
Mais pour le moment ce code, m'affiche uniquement ma liste de catégories, je ne sais pas comment faire avec ce code pour aussi afficher le nombre d'articles que chaque catégorie contient;
Merci beaucoup.