Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/03/2011, 23h41   #1
Invité régulier
 
Homme
Debutant
Inscription : mars 2011
Messages : 24
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Debutant

Informations forums :
Inscription : mars 2011
Messages : 24
Points : 9
Points : 9
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 :
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
gael-abdelhadi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 00h07   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
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.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 00h08   #3
Invité régulier
 
Homme Kévin
Inscription : mars 2011
Messages : 12
Détails du profil
Informations personnelles :
Nom : Homme Kévin
Localisation : France

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 9
Points : 9
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 :
SELECT COUNT(*) FROM commentaire WHERE commentaire.id_billet = '.$donnees['id'];
spydemon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 08h34   #4
Invité régulier
 
Homme
Debutant
Inscription : mars 2011
Messages : 24
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Debutant

Informations forums :
Inscription : mars 2011
Messages : 24
Points : 9
Points : 9
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 :
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?
gael-abdelhadi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 09h24   #5
Invité régulier
 
Homme Kévin
Inscription : mars 2011
Messages : 12
Détails du profil
Informations personnelles :
Nom : Homme Kévin
Localisation : France

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 9
Points : 9
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 :
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
spydemon est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h17.


 
 
 
 
Partenaires

Hébergement Web