Page 1 sur 2

compté le nombre de réponses dans un forum

Posté : 02 juin 2010, 13:21
par fabrice88250
Bonjour,
au meme titre que sur ce forum je voudrai que l'orsque l'on est sur la page avec tout les sujets postés sur le forum affiché le nombre de réponses.

j'ai donc fait un petit bou de code avec jointure de la table reponse et sujet afin de calculer les réponses postés. Le soucis et que au lieu de compter et d'afficher les réponses par sujet le total qui ressort est le total de toutes les réponse du forum.
	// on affiche le nombre de réponse de ce sujet
	// on prépare notre requête
	$sqlrep = 'SELECT * FROM forum_sujets INNER JOIN forum_reponses WHERE forum_reponses.correspondance_sujet = forum_sujets.id';

	// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
	$reqrep = mysql_query($sqlrep);
	
	//on conte le nombre de messages :
	$nb_rep = mysql_num_rows ($reqrep);
	if ($nb_rep == 0) {
	echo '0 réponse';
	}
	else {
	echo  $nb_rep. 'réponses';
		}
mes tables sql sont les suivantes :
CREATE TABLE `forum_sujets` (
  `id` int(6) NOT NULL auto_increment,
  `auteur` varchar(30) collate latin1_german2_ci NOT NULL,
  `titre` text collate latin1_german2_ci NOT NULL,
  `date_derniere_reponse` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`id`)
);

CREATE TABLE `forum_reponses` (
  `id` int(6) NOT NULL auto_increment,
  `auteur` varchar(30) collate latin1_german2_ci NOT NULL,
  `message` text collate latin1_german2_ci NOT NULL,
  `date_reponse` datetime NOT NULL default '0000-00-00 00:00:00',
  `correspondance_sujet` int(6) NOT NULL,
  PRIMARY KEY  (`id`)
);

Re: compté le nombre de réponses dans un forum

Posté : 02 juin 2010, 13:30
par stealth35
essaye comme ca, mais fait d'hab ta requête dans phpmyadmin
SELECT sujet.*, COUNT(forum_reponses.id) AS num_ reponses
FROM forum_sujets AS sujet 
LEFT JOIN forum_reponses WHERE forum_reponses.correspondance_sujet = forum_sujets.id

Re: compté le nombre de réponses dans un forum

Posté : 02 juin 2010, 13:37
par fabrice88250
après test avec ta requete, le nombre de réponses est à chaque fois de 0... :cry:

Re: compté le nombre de réponses dans un forum

Posté : 02 juin 2010, 14:15
par fabrice88250
Bon alors comme je galère et qu'après plusieurs heures d'essais je n'y arrive toujours pas je vous met le code complet. Peut etre trouverez vous ou est mon probléme ?
<?php
function switchcolor()
 { 
   static $col;
   $couleur1 = "#F9D893";
   $couleur2 = "#F6C664";

    if ($col == $couleur1)
     {
       $col = $couleur2;
     }
    else
     {
       $col = $couleur1;
     }
    return $col; 
 }

$req = mysql_query("SELECT forum_sujets.id, forum_sujets.auteur, forum_sujets.titre, forum_sujets.date_derniere_reponse, forum_reponses.message, forum_reponses.correspondance_sujet FROM forum_sujets INNER JOIN forum_reponses ON (forum_reponses.correspondance_sujet = forum_sujets.id) group by forum_sujets.id order by forum_sujets.date_derniere_reponse desc,forum_reponses.date_reponse desc"); 

//$req = mysql_query("SELECT id, auteur, titre, date_derniere_reponse FROM forum_sujets ORDER BY date_derniere_reponse DESC"); 
// on compte le nombre de sujets du forum
$nb_sujets = mysql_num_rows ($req);
if ($nb_sujets == 0) {
	echo 'Aucun sujet';
}
else {
	echo '<h3>Nombre total de sujet postés sur le Forum :'.$nb_sujets.'</h3>';
	echo '<table width="780" border="0" cellpadding="5" cellspacing="0">
    <tr>
        <td>
        <span class="orange">Titre du sujet</span>
        </td>
        <td>
        <div align="center"><span class="orange">Auteur</span></div>
        </td>
		<td>
        <div align="center"><span class="orange">Vues</span></div>
        </td>        
		<td>
        <div align="center"><span class="orange">Réponses</span></div>
        </td>
        <td>
        <div align="center"><span class="orange">Date dernière réponse</span></div>
        </td>        
    </tr>';

	// on va scanner tous les tuples un par un
	while ($data = mysql_fetch_array($req)) {

	// on décompose la date
	sscanf($data['date_derniere_reponse'], "%4s-%2s-%2s %2s:%2s:%2s", $annee, $mois, $jour, $heure, $minute, $seconde);

	// on affiche les résultats
?>
    <?php echo "<tr bgcolor=\""; echo switchcolor(); echo "\">" ?>
    <?php $Id[]=$data['id']; ?>
<?php
	echo '<td>';
	// on affiche le titre du sujet, et sur ce sujet, on insère le lien qui nous permettra de lire les différentes réponses de ce sujet
	echo '<a href="./lire_sujet.php?id_sujet_a_lire=' , $data['id'] , '">' , $data['titre'] , '</a>';
	//aperçu du message de l'internaute
	echo '<p>'.substr($data['message'], 0, 80). '...</p>';

	echo '</td><td><div align="center">';
	// on affiche le nom de l'auteur de sujet
	echo $data['auteur'];
	echo '</div></td><td><div align="center">';

	// on affiche le nombre de fois ou le sujet a été vue
	echo 'vue';
	
	echo '</div></td><td><div align="center">';

	// on affiche le nombre de réponse de ce sujet
	$sqlrep = 'SELECT sujet.*, COUNT(forum_reponses.id) AS num_ reponses FROM forum_sujets AS sujet LEFT JOIN forum_reponses WHERE forum_reponses.correspondance_sujet = forum_sujets.id';
	$reqrep = mysql_query($sqlrep);
	//on conte le nombre de reponses :
	$nb_rep = mysql_num_rows ($reqrep);
	if ($nb_rep == 0) {
	echo '0 réponse';
	}
	else {
	echo  $nb_rep. ' réponses';
		}
	
	echo '</div></td><td><div align="center">';

	// on affiche la date de la dernière réponse de ce sujet
	echo $jour , '-' , $mois , '-' , $annee , ' ' , $heure , ':' , $minute;
	}

	echo '</div></td></tr></table>';

}

// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($req);
// on ferme la connexion à la base de données.
mysql_close ();
?>

Re: compté le nombre de réponses dans un forum

Posté : 02 juin 2010, 16:36
par stealth35
ta pas une page visible en ligne ?

Re: compté le nombre de réponses dans un forum

Posté : 02 juin 2010, 16:51
par fabrice88250
non désolé je suis en local. mais si tu veus un aperçu
aperçu
là tu as la page d'accueil et on voit bien que le nombre de réponses est le meme pour tout les sujets au lieu d'avoir un nombre different

Re: compté le nombre de réponses dans un forum

Posté : 02 juin 2010, 17:00
par stealth35
ta pas rajouter le COUNT dans ta requete

Re: compté le nombre de réponses dans un forum

Posté : 02 juin 2010, 17:05
par fabrice88250
en fait en mettant ta requete avec count :
SELECT sujet.*, COUNT(forum_reponses.id) AS num_ reponses
FROM forum_sujets AS sujet 
LEFT JOIN forum_reponses WHERE forum_reponses.correspondance_sujet = forum_sujets.id
au lieu d'avoir un resultat 8 réponse comme acctuellemnt j'ai 0 réponse.

Re: compté le nombre de réponses dans un forum

Posté : 02 juin 2010, 17:29
par stealth35
ta essayes dans phpmyadmin ?

Re: compté le nombre de réponses dans un forum

Posté : 02 juin 2010, 17:40
par fabrice88250
quand je l'essai dans phpmyadmin j'ai un message d'erreur :
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'reponses FROM forum_sujets AS sujet LEFT JOIN forum_reponses WHERE forum_repon' at line 1
dans la requete il y a un espace entre num_ et reponse.
en suppriment l'espace j'ai cette erreur :
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE forum_reponses . correspondance_sujet = forum_sujets . id LIMIT 0, 30' at line 1
de plus je ne sais pas si sa peut t'aider mais dans la réecriture de la requete par phpmyadmin il met en rouge la partie . * , COUNT(

Re: compté le nombre de réponses dans un forum

Posté : 02 juin 2010, 17:46
par stealth35
et comme ca
SELECT *, COUNT(forum_reponses.id) AS num_ reponses
FROM forum_sujets
LEFT JOIN forum_reponses ON forum_reponses.correspondance_sujet = forum_sujets.id

Re: compté le nombre de réponses dans un forum

Posté : 02 juin 2010, 17:50
par fabrice88250
idem
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'reponses FROM forum_sujets LEFT JOIN forum_reponses ON forum_reponses . corres' at line 1
l'espace entre le num_ et reponse c'est exprès ?

Re: compté le nombre de réponses dans un forum

Posté : 02 juin 2010, 17:59
par stealth35
non y'en a pas c'est une erreur

Re: compté le nombre de réponses dans un forum

Posté : 02 juin 2010, 18:01
par fabrice88250
ok bon de tout facon sa resoud pas le probleme qui est toujours le même.

depuis ma page lire_sujet j'arrive pourtant bien a compté les réponses mais sur cette page pas besoin de jointure. Je pense que le probleme pourrait provenir de la jointure mais je suis incapable de dire pourquoi.
voilà le code sur ma page lire_sujet qui fonctionne.
	<?php
	// on prépare notre requête
	$sql = 'SELECT auteur, message, date_reponse FROM forum_reponses WHERE correspondance_sujet="'.$_GET['id_sujet_a_lire'].'" ORDER BY date_reponse ASC';
	// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
	$req = mysql_query($sql);
	//on conte le nombre de reponses:
	$nb_sujets = mysql_num_rows ($req);
	
if ($nb_sujets == 0) 
{
	echo 'Aucun sujet';
}
else {
//on soustrait au nombre total le message d'origine qui n'est pas un réponse
$nb_sujets = $nb_sujets-1;
echo '<h2><span class="orange">Nombre de réponse(s) pour ce sujet : </span><span class="bleu">' .$nb_sujets.'</span></h2>';
}
?>

Re: compté le nombre de réponses dans un forum

Posté : 02 juin 2010, 18:05
par stealth35
ok bon de tout facon sa resoud pas le probleme qui est toujours le même.
non, faux mettre un COUNT dans ta requête ca marchera jamais sinon, c'est COUNT + GROUP BY