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 :

compter le nombre de commentaire d'une table pour l'article appele dans un autre table [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Debutant
    Inscrit en
    Mars 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Debutant

    Informations forums :
    Inscription : Mars 2011
    Messages : 30
    Points : 28
    Points
    28
    Par défaut compter le nombre de commentaire d'une table pour l'article appele dans un autre table
    Bonjour

    alors j'exposerais d'abord mon probleme et ensuite je montrerais ce que j'ai cru etre une solution mais comme ca marche pas...

    J'affiche les billets de mon blog en page d'accueil et je veux rajouter a cote de commentaire le nombre de comm pour chaque article. J'imagine que c'est un truc classique mais j'ai pas trouve la soluce.
    Alors j'ai donc 2 tables une nommee billet et une nommee commentaire qui contient id_billet dans le but de joindre les 2 tables pour l'affichage des comm avec chaque article et aussi pour le compte des comms de chaque article

    mon probleme c'est que ca me renvoi des nombres de code identique a chaque article. J'ai essaye de joindre ou non, j'ai essaye COUNT en sql et count en php, j'ai essaye par WHERE ou par GROUP BY en fait j'essaye tout ce que je peux mais franchement j'arrive pas a compte de nombre de comm correspond a l'id_billet en cours.

    Voila mon dernier code pour tenter d'y parvenir

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    		<?php
    			try
    			{
    			$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    			$bdd = new PDO('mysql:host=localhost;dbname=citations', 'root', '', $pdo_options);
     
    			$req = $bdd->query('SELECT id, titre, categorie, article, DATE_FORMAT(date_art, \'%d/%m/%Y à %Hh%imin\') AS date_art_fr FROM billet ORDER BY id DESC LIMIT 0, 7 ');
    			$donnees = $req->fetch();
     
    			$req2= $bdd->query('
    					   SELECT b.id as id_art, COUNT(commentaire.id_billet) as total_com
    					   FROM billet b
    					   LEFT JOIN commentaire ON commentaire.id_billet = '.$donnees['id'].'
    					   GROUP BY '.$donnees['id'].' = commentaire.id_billet
    					   ');
     
    			$nb_comm = $req2->fetchAll();
     
    			while ($donnees = $req->fetch())
    			{
    		?>
     
    		<div class="articles">
     
    			<span id="titre"><a href="article.php?id=<?php echo $donnees['id'] ?>"><?php echo $donnees['titre']; ?></a></span><br />
    			<span id="date"><?php echo $donnees['date_art_fr']; ?><br />
    			Catégorie : </span><span id="categorie"><?php echo $donnees['categorie']; ?></span>
     
    			<div id="article"><?php echo nl2br($donnees['article']); ?></div>
     
    			<div id="comm">
    				<a href="article.php?id=<?php echo $donnees['id'] ?>">
    					<?php echo 'commentaire ('.count('commentaire.id_billet = '.$donnees['id'].'').')'; ?>
    				</a>
    			</div>
     
    		</div>
     
    		<?php
    c'est surement une heresie mais j'en ai essaye des differents, j'ai essaye tout le peu que j'ai pu apprendre et essaye de comprendre dans d'autre post.

    qui pourra m'aider et m'expliquer ?
    Merci beaucoup

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est normal que tu recupères toujours le même nombre puisque tu ne fais ta requête count que sur un seul id.

    Tu peux faire ton COUNT dans ta première requête.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Salut

    En fait, tu ne peux pas utiliser une même requête pour retourner quelque chose de propre à la table (son nombre d'entrés), et quelque chose de propre justement, à une entré (b.id et id_art). Y a des mots savants pour décrire ça, mais sur le coup je ne les connais plus

    Pour compter le nombre de commentaires, ça devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) FROM commentaire WHERE commentaire.id_billet = '.$donnees['id'];

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Debutant
    Inscrit en
    Mars 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Debutant

    Informations forums :
    Inscription : Mars 2011
    Messages : 30
    Points : 28
    Points
    28
    Par défaut
    Bon encore une fois j'ai fini par trouve après avoir pose la question, j'ai eu une illumination lol, vous devez connaitre genre vous faites un truc qui a rien a voir et paf la solution arrive !

    en tout les cas, déjà pour résoudre mon problème j'ai fait une page a part pour arriver a trouver la requête nécessaire, une fois que ca a marcher il suffisait de donner pour variable l'id appelé de l'article et voila

    voila le code qui a marché

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?php
     
    $id_billet=$donnees['id'];
     
    {
     
    try
    {
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $bdd = new PDO('mysql:host=localhost;dbname=citations' , 'root' , '' , $pdo_options);
     
        $nb_comm = $bdd->query('SELECT COUNT(*) as total_art FROM commentaire WHERE id_billet = '.$id_billet.'');
     
        $donnees=$nb_comm->fetch();
     
     
     
        echo $donnees['total_art'];
     
    }
     
    catch(Exception $e)
        {
    	die('Erreur : '.$e->getMessage());
        }
    }
    ?>
    par contre j'aurais bien aime le mettre en fonction mais voila j'arrive pas, du coup je l'ai juste mis en include.
    pour le mettre en fonction il aurait fallu que je mette quoi comme valeur liée a la fonction?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par gael-abdelhadi Voir le message
    pour le mettre en fonction il aurait fallu que je mette quoi comme valeur liée a la fonction?
    Tu parles des paramètres de la fonction ? Il suffit de faire quelque chose comme ça :

    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
    17
    18
     
    function comptage($id) {
        try
        {
            $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
            $bdd = new PDO('mysql:host=localhost;dbname=citations' , 'root' , '' , $pdo_options);
     
            $nb_comm = $bdd->query('SELECT COUNT(*) as total_art FROM commentaire WHERE id_billet = '.$id.'');
     
            return $nb_comm;
        }
     
        catch(Exception $e)
        {
    	die('Erreur : '.$e->getMessage());
            return false;
        }
    }
    Je suis juste pas sur du return dans le catch, mais tu peux toujours essayer

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/09/2014, 21h31
  2. [MySQL] requete pour faire un select dans toutes les tables pour trouver le titre
    Par japhettchabao dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 12/09/2014, 20h02
  3. Réponses: 14
    Dernier message: 20/05/2014, 17h37
  4. Réponses: 7
    Dernier message: 10/03/2014, 14h19
  5. [XL-2007] Créer une macro pour supprimer des onglets dans un autre classeur
    Par nicosd54 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/03/2011, 10h01

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