Bonjour.
SVP, je viens demander de l’aide pour finir une requête SQL. Mon objectif est de récupérer toute les catégories, et de compter nombre de métiers par catégorie. Mais les métiers qui n’ont aucun professionnel joint, ne pas les compter.
C’est la 1ère fois que je tente de faire quelques chose comme ça, donc je galère.
Voici mon code (c’est du Laravel, mais ça reste compréhensible pour tout les dév) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <?php /** * Prendre en compte 3 Models : Categorie - Metier - Professionnel * * L'objectif : * Récupérer toute les catégories, et compter nombre de métiers par catégorie. * Mais les métiers qui n'ont aucun professionnel joint, ne pas les compter. */ public function getCategoriesAndCountMetiersByCategorieIfMetierHasMinimumOneProfessional() { return Categorie::select([ Categorie::TABLE.'.id', Categorie::TABLE.'.h1', Categorie::TABLE.'.slug', DB::raw('COUNT('.Metier::TABLE.'.id) as nbMetiersJoined') ]) // jointures avec Metier (Categorie a relation Many to Many avec Metier) ->join( Categorie::TABLE_INTERMEDIATE_JOINED_TO_METIERS, Categorie::TABLE.'.id', '=', Categorie::TABLE_INTERMEDIATE_JOINED_TO_METIERS.'.metier_id' ) ->join( Metier::TABLE, Metier::TABLE.'.id', '=', Categorie::TABLE_INTERMEDIATE_JOINED_TO_METIERS.'.categorie_id' ) ->groupBy(Categorie::TABLE.'.id', Categorie::TABLE.'.h1', Categorie::TABLE.'.slug') ->orderBy(Categorie::TABLE.'.h1', 'ASC') ->get(); } |
Ceci me compte le nombre de métiers par catégories. Même les métiers qui ne sont joints à aucun prestataires sont pris en compte. Alors que je veux prendre en compte dans le COUNT que les métier qui sont joints à au moins 1 professionnel.
Je souhaiterai savoir si ce que je demande est techniquement possible ? Et si oui, j’aimerais savoir ce que je doit rajouter pour arriver à la solution que je souhaite ?
Merci beaucoup.