Bonjour, je viens demander un renseignement 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 cette catégories contient.
Mon code marche, mais je ne sais pas si j'utilise la meilleur manière. Voici mon Code: HTML:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <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 ** $data2 = $categorieArticle->selectListeCategories(); foreach($data2 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.'" '.$selected.'>'.$data_cat->nom.' ('.$data_count.')</option>'; } ?> </select> </form> |
Et PHP:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?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->_tablePivotCategoriesJointesArticles." ON ".$this->_tableArticles.".id = ".$this->_tablePivotCategoriesJointesArticles.".id_article"; "WHERE ".$this->_tablePivotCategoriesJointesArticles.".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; } |
Avec ce code, si par exemple il y a 50 catégories, ça me fait faire 50 requêtes SQL COUNT… ça fait pas un peu beaucoup ? Y a t-il une autre solution? (une autre requete SQL qui consomme moins de ressources ?).
Merci beaucoup.
+0
-0