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

  1. #1
    Membre à l'essai
    Homme Profil pro
    autres
    Inscrit en
    Février 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : autres
    Secteur : Transports

    Informations forums :
    Inscription : Février 2018
    Messages : 34
    Points : 11
    Points
    11
    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 : 58
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    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;

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

    Informations professionnelles :
    Activité : autres
    Secteur : Transports

    Informations forums :
    Inscription : Février 2018
    Messages : 34
    Points : 11
    Points
    11
    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 à l'essai
    Homme Profil pro
    autres
    Inscrit en
    Février 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : autres
    Secteur : Transports

    Informations forums :
    Inscription : Février 2018
    Messages : 34
    Points : 11
    Points
    11
    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 : 58
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Teste le SQL qu'on te donne dans ton PHPmyadmin DIRECT....

  7. #7
    Membre à l'essai
    Homme Profil pro
    autres
    Inscrit en
    Février 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : autres
    Secteur : Transports

    Informations forums :
    Inscription : Février 2018
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Dendrite Voir le message
    Teste le SQL qu'on te donne dans ton PHPmyadmin DIRECT....
    Code : 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
     
    Erreur
     
    Requête SQL : Documentation
     
    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
     
    MySQL a répondu: Documentation
    #1064 - Erreur de syntaxe près de '*) FROM commentaire c WHERE c.id_billet=b.id) AS nb_com
    FROM billet b
    group by' à la ligne 3
    Voici la réponse, aprés je sais pas si je l'ai fais au bon endroit

  8. #8
    Invité
    Invité(e)
    Par défaut
    Et avec SELECT count(*) ?

    (cela dit, je ne suis pas certain de la syntaxe...)

  9. #9
    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 : 58
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Si, cette fois tu sembles taper au bon endroit. Et ma proposition renvoie quelle erreur ?

  10. #10
    Membre à l'essai
    Homme Profil pro
    autres
    Inscrit en
    Février 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : autres
    Secteur : Transports

    Informations forums :
    Inscription : Février 2018
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Dendrite Voir le message
    Si, cette fois tu sembles taper au bon endroit. Et ma proposition renvoie quelle erreur ?
    Elle donnais la même erreur, problème de (c.*) je pense...je test encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Erreur
     
    Requête SQL : Documentation
     
    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 commentaires c on c.id_billet=b.id
    group by b.id
    ORDER BY b.id DESC LIMIT 10
     
    MySQL a répondu: Documentation
    #1064 - Erreur de syntaxe près de '*) as nb_com
    FROM billet b
    left join commentaires c on c.id_billet=b.id
    group' à la ligne 1

  11. #11
    Membre à l'essai
    Homme Profil pro
    autres
    Inscrit en
    Février 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : autres
    Secteur : Transports

    Informations forums :
    Inscription : Février 2018
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Et avec SELECT count(*) ?

    (cela dit, je ne suis pas certain de la syntaxe...)
    Y'as plus d'erreur dans le phpmyadmin, mais quand je test sur les page ça me met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Notice: Undefined variable: nb_com in
    voici le 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
     
    <?php
     
    // 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(*) 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())
     
    					{
    					?>
     
    						<!-- 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 $nb_com; ?> les commentaires</a></p> 
     
    							</p>

  12. #12
    Invité
    Invité(e)
    Par défaut
    Montre (à chaque fois) le message d'erreur complet : il indique la ligne concernée (entre autres)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <p class="signature"> <a href="commentaires.php?billet=<?php echo $donnees['id']; ?>">Voir les <?php echo $donnees['nb_com']; ?> commentaires</a></p>
    Dernière modification par Invité ; 03/06/2018 à 17h33.

  13. #13
    Membre à l'essai
    Homme Profil pro
    autres
    Inscrit en
    Février 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : autres
    Secteur : Transports

    Informations forums :
    Inscription : Février 2018
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Notice: Undefined variable: nb_com in C:\wamp64\www\monsite\forum.php on line 86
    Oui, le message correspond à la ligne 21 qui est la ligne 86 dans mon code, mais ça sert à rien que je vous pollue avec un tas de code pour rien, je mets le principal

  14. #14
    Invité
    Invité(e)
    Par défaut
    Si tu as su identifier la ligne concernée, pourquoi n'as-tu pas corrigé toi-même ?

    Alors, ?

  15. #15
    Membre à l'essai
    Homme Profil pro
    autres
    Inscrit en
    Février 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : autres
    Secteur : Transports

    Informations forums :
    Inscription : Février 2018
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Oups..!! désolé jreaux62, je suis confus , j'avais pas bien lu ta réponse, j'avais pas vu que tu avais donné la solution....
    C'est corrigé et ça fonctionne, encore merci. je mets en résolu.

+ 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