IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Création d'un forum] Afficher le nombre total de topic pour chaque section


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Junior
    Inscrit en
    Septembre 2021
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Junior

    Informations forums :
    Inscription : Septembre 2021
    Messages : 70
    Points : 30
    Points
    30
    Par défaut [Création d'un forum] Afficher le nombre total de topic pour chaque section
    Bonjour,

    Je suis confronté depuis 2 jours à un problème dans mon projet de développement d'un forum. La home de mon site affiche la liste de toutes les sections puis à coté le nombre total de topic et messages respectifs pour chaque (le 0 est noté en dur).

    Nom : Capture.PNG
Affichages : 107
Taille : 31,0 Ko

    Dans ma méthode home j'ai simplement fait un findAll pour afficher le titre et la description de chaque section, jusqu'ici tout va bien.

    Maintenant je ne sais pas comment gérer le nombre de topic et messages pour CHAQUE section sachant que je suis sur une route home qui affiche seulement les données de mes entités SECTION (title et description).

    J'ai bien une relation One-to-Many entre les entités SECTION et TOPIC mais même en faisant une jointure avec cette requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $conn = $this->getEntityManager()->getConnection();
     
            $sql = '
                SELECT COUNT(*) FROM section s
                JOIN topic t
                WHERE s.id = t.section_id
                AND t.section_id = '.$id.'
                ';
            $stmt = $conn->prepare($sql);
            $stmt->execute();
     
            return $stmt->fetchAll();
    ce qui m'affiche effectivement le nombre total de topic et messages pour chaque TOPIC sauf que ça fonctionne seulement sur une route section/[id-de-la-section], or je veux que ces infos soient affichées sur ma route home.

    En espérant m'être bien exprimé, je précise que j'utilise Symfony 5 avec MYSQL pour la SGBD.

    Merci d'avance
    Images attachées Images attachées  

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Junior
    Inscrit en
    Septembre 2021
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Junior

    Informations forums :
    Inscription : Septembre 2021
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Je n'ai toujours pas trouvé la solution. Je sais que ca se passe au niveau du QueryBuilder mais je vois pas quoi faire.

    Si vous aurez une idée je suis preneur

    Merci !

  3. #3
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    À supposer que tu aies des tables de ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sections
    --------------
    section_id
    section_name
     
    topics
    --------------
    topic_id
    topic_subject
    topic_section
    La requête qui liste les sections et le nombre de discussions de chacune d'elles :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ALL section_id, section_name, COUNT(topic_id) AS section_topics
    FROM sections
    LEFT OUTER JOIN topics ON section_id = topic_section
    GROUP BY section_id, section_name

    Une jointure externe pour ramener les sections ayant 0 topics.

    Pour exprimer cela avec ton outil, je ne pourrai pas t'aider.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Junior
    Inscrit en
    Septembre 2021
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Junior

    Informations forums :
    Inscription : Septembre 2021
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Merci pour ta réponse je regarde ca de plus près, je ne connaissais pas l'option GROUP BY.

    Elle sert à grouper les topics liés à leur section respectif ?

    Et sur ce code là LEFT OUTER JOIN topics ON section_id = topic_section je n'ai pas compris le ON section_id = topic_section ce serait pas plutôt ON section_id = section_topics ?

  5. #5
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par ZakiDev Voir le message
    je ne connaissais pas l'option GROUP BY.

    Elle sert à grouper les topics liés à leur section respectif ?
    Oui je groupe par section_id et section_name, et je compte les topic_id selon ce groupement (donc de chaque section au final).

    sur ce code là LEFT OUTER JOIN topics ON section_id = topic_section je n'ai pas compris le ON section_id = topic_section
    C'est le critère de jointure, clef étrangère topics.topic_section sur sections.section_id

    ce serait pas plutôt ON section_id = section_topics ?
    Non section_topics est un agrégat, un compteur, il ne peut pas servir pour la jointure ici.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Junior
    Inscrit en
    Septembre 2021
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Junior

    Informations forums :
    Inscription : Septembre 2021
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Merci pour l'explication c'est plus clair.

    J'ai pu affiné la requête

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT COUNT(section_id) 
            FROM topic
            JOIN section ON topic.section_id = section.id
            GROUP BY section.id

    Ce qui me donne bien le nombre de topic par section

    Nom : Capture.PNG
Affichages : 64
Taille : 6,1 Ko

    Par contre, je ne sais pas du tout comment l'afficher via TWIG. J'ai bien testé avec une boucle for mais rien.

  7. #7
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Elle n'est pas bonne ta requête, une section vide n'apparaîtra pas et tu ne sais pas sur quelle section le décompte est effectué.

    Pour Twig je ne pourrai t'aider.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Junior
    Inscrit en
    Septembre 2021
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Junior

    Informations forums :
    Inscription : Septembre 2021
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Effectivement j'ai testé avec une section sans topic elle s'affichait pas. Et l'id de chaque section associé au nombre de topic s'affichait pas non plus.

    Avec le dql ca m'affiche bien les bonnes informations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    return $this->createQueryBuilder('s')
                ->select('s.id, count(t.section)')
                ->leftJoin('App\Entity\Topic', 't', 'WITH', 't.section = s.id')            
                ->groupBy('s.id')
                ->getQuery()
                ->getScalarResult()
            ;

    Nom : Capture.PNG
Affichages : 66
Taille : 6,5 Ko

    La section avec l'ID 92 s'affiche bien avec 0 topic

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2021
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Octobre 2021
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Perso, j'irais simplement avec une sous-requête comme:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_section, nom_section, (SELECT COUNT(id_topics) FROM topics AS TOPS WHERE TOPS.id_section = SECT.id_section) AS NbTopics
    FROM section AS SECT
    (blabla).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Afficher le nombre total de ligne d'une table
    Par Crachover dans le forum IHM
    Réponses: 2
    Dernier message: 26/02/2010, 09h46
  2. Afficher le nombre total de processus
    Par Lenou dans le forum Linux
    Réponses: 0
    Dernier message: 11/02/2010, 16h32
  3. Afficher le nombre total de page Printpreviewdialog
    Par olibara dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/11/2009, 14h15
  4. [MySQL] afficher le nombre total d'enregistrements
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 21/03/2006, 22h14
  5. [MySQL] afficher le nombre total de message
    Par blastmanu dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 17/02/2006, 19h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo