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

PHP & Base de données Discussion :

Afficher le nombre de commentaire pour chaque billet [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    autres
    Inscrit en
    Février 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : autres
    Secteur : Transports

    Informations forums :
    Inscription : Février 2018
    Messages : 34
    Par défaut Afficher le nombre de commentaire pour chaque billet
    Bonjour,
    J'aimerais afficher le nombre de commentaire pour chaque billet dans ma page de forum
    Exemple:
    -billet N° 1 => 3 commentaires.
    -billet N° 2 => 2 commentaires.
    -billet N° 3 => 4 commentaires.
    etc.., j'ai ce code
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
     
    <?php
     
    // on récupère le nombre de commentaire pour les afficher
    					$nb_comm = $bdd->query('SELECT COUNT(*) AS test FROM commentaires WHERE id_billet = id_billet');
    					$test = $nb_comm->fetch();
     
    				// On récupère les derniers billet
    					$req = $bdd->query('SELECT id, titre, contenu, DATE_FORMAT(date_creation, \'%d/%m/%Y à %Hh%i \') AS date_creation FROM billet ORDER BY ID DESC LIMIT ' .$pagestart.','.$msgpage);
    					while ($donnees = $req->fetch())
     
    					{
    						?>
     
    						<!-- Affichage de chaque message (toutes les données sont protégées par htmlspecialchars) -->
    						<div class="inside">
     
    							<div class="block_titre">	<!-- On affiche le titre et la date de création du billet -->
    								<?php echo '<span class="titre_forum">' . htmlspecialchars($donnees['titre']) . '</span> <p class="date_forum"> Posté le ' . $donnees['date_creation'] . '</p> ' ; ?>
    							</div>
     
    							<p class="contenu_forum">
    								<?php echo nl2br (texte(htmlspecialchars($donnees['contenu']))) ; ?> <br /> <!-- On affiche le contenu du billet -->
    								<!--  ici le lien permettant l'envoi du commentaire correspondant au N° id -->					
    								<p class="signature"> <a href="commentaires.php?billet=<?php echo $donnees['id']; ?>">Voir <?php echo $test['test']; ?> les commentaires</a></p> 
     
    							</p>
    ?>

    Pour le moment j'ai testé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE id_billet = id_billet
    mais il me renvoie le nombre total additionné de chaque billet, le problème c'est que je ne sait pas faire la liaison pour chaque billet.
    Pourriez-vous m'indiquer la démarche à suivre, merci.

  2. #2
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Bonjour,

    Avec une jointure (ici optionnelle), tu peux tout faire remonter en une seule requête.
    Teste ceci dans ton PHPmyadmin....

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT b.id, b.titre, b.contenu, DATE_FORMAT(b.date_creation, "%d/%m/%Y à %H:%i:%s") AS date_creation,count(c.*) as nb_com
    FROM billet b
    left join commentaire c on c.id_billet=b.id
    group by b.id
    ORDER BY b.id DESC LIMIT 10;
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Membre averti
    Homme Profil pro
    autres
    Inscrit en
    Février 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : autres
    Secteur : Transports

    Informations forums :
    Inscription : Février 2018
    Messages : 34
    Par défaut
    Citation Envoyé par Dendrite Voir le message
    Bonjour,

    que donne cette requête sur ton phpmyadmin ? (bien sûr, ne mets pas 55 spécialement)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) AS nb_com FROM commentaires WHERE id_billet = 55
    J'ai essayé avec ce code, il me donne le résultat de l'id N° 55 pour chaque id
    Exemple si id 55 à 6 commentaire, il m'affiche:
    -billet N° 1 => 6 commentaires.
    -billet N° 2 => 6 commentaires.
    -billet N° 3 => 6 commentaires.
    etc...

    EDIT:

    Vous avez changés votre message entre temps

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    En une seule requête (au cas où celle de Dendrite ne corresponde pas) :


    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT b.id, b.titre, b.contenu, 
    DATE_FORMAT(b.date_creation, "%d/%m/%Y à %H:%i:%s") AS date_creation,
    (SELECT count(c.*) FROM commentaire c WHERE c.id_billet=b.id) AS nb_com
    FROM billet b
    group by b.id
    ORDER BY b.id DESC LIMIT 10;

  5. #5
    Membre averti
    Homme Profil pro
    autres
    Inscrit en
    Février 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : autres
    Secteur : Transports

    Informations forums :
    Inscription : Février 2018
    Messages : 34
    Par défaut
    RE, j'ai testé les deux, mais il me fais un erreur "Fatal error: Call to a member function fetch() on boolean in " qui correspond à la ligne de retour sous le code ci-dessous:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // On récupère les derniers billet
    $req = $bdd->query('SELECT b.id, b.titre, b.contenu, DATE_FORMAT(b.date_creation, "%d/%m/%Y à %H:%i:%s") AS date_creation, (SELECT count(c.*) FROM commentaires c WHERE c.id_billet=b.id) AS nb_com FROM billet b group by b.id ORDER BY b.id DESC LIMIT ' .$pagestart.','.$msgpage);
    while ($donnees = $req->fetch())

  6. #6
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Teste le SQL qu'on te donne dans ton PHPmyadmin DIRECT....
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

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

Discussions similaires

  1. afficher les 10 premiers enregistrements pour chaque groupe
    Par freestyler dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/06/2008, 15h46
  2. Réponses: 6
    Dernier message: 16/04/2007, 15h33
  3. afficher dans un etat le nombre de personnes pour chaque ville
    Par puppusse79 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/12/2006, 15h55
  4. Réponses: 5
    Dernier message: 13/10/2006, 08h00
  5. Réponses: 26
    Dernier message: 06/06/2006, 23h15

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