Kommentare zählen

solomat

Erfahrenes Mitglied
Ich habe zwei Tabellen, in einer werden Beiträge gespeichert und in der anderen Kommentare dazu.

Die Ausgabe der Beiträge und der dazugehörigen Kommentare funktioniert einwandfrei.

In der Tabelle der Kommentare habe ich die ID des Beitrages gespeichert um bei der Ausgabe sortieren zu können welches Kommentar zu welchen Beitrag gehört.

Nun mein Problem: Ich bekomm es einfach nicht hin, die Kommentare die zu einen Beitrag gehören zu zählen. Ich bekomm das script zum zählen einfach nicht rein damit es auch richtig zählt.

Hier die Ausgabe der Beiträge wo auch das Zählscript rein soll:
PHP:
<?
include("sqlfile.php");
$sql="SELECT * FROM beitraege ORDER BY id DESC";
$erg = mysql_query($sql) OR die(mysql_error());
while (list($id,$ueberschrift,$text,$filename,$name,$imgtext,$eintragvom)=mysql_fetch_row($erg))
eval("\$listbit .= \"".gettemplate("listbit")."\";");
eval("dooutput(\"".gettemplate("beitraege")."\");");
?>
Und hier das script was ich da nich reinbekomme:
PHP:
$aufgabe = "SELECT  COUNT(*) AS Anzahl FROM commentbe WHERE beid = '$id' "; 
$ergebnis = mysql_query($aufgabe)  or die (mysql_error()); 
while($row = mysql_fetch_object($ergebnis)) 
{     
$anz = $row->Anzahl; 
}

Vielen Dank schonmal für eure Hilfe!
 
Vielleicht suchst Du dieses Query:
Code:
select
  beitraege.id,
  beitraege.weitereFelder,
  count(commentbe.id) as anzahlKommentare
from beitraege
left join commentbe
  on commentbe.beid=beitraege.id
group by beitraege.id
order by beitraege.id desc
Gruß hpvw
 
Ne, das such ich nicht.

Ich will die Kommentare zählen. Um bei der Ausgabe eines Beitrages zu zeigen wieviel Kommentare zum Beitrag geschrieben wurden. Die Scripts funktionieren beide. Ich bekomm die nur einfach nicht zusammen damit das funktioniert.
 
solomat hat gesagt.:
... eines Beitrages ...
Dann schränke es doch ein:
Code:
select
  beitraege.id,
  beitraege.weitereFelder,
  count(commentbe.id) as anzahlKommentare
from beitraege
left join commentbe
  on commentbe.beid=beitraege.id
where beitraege.id=$id
group by beitraege.id
order by beitraege.id desc
Gruß hpvw
 
Funktioniert leider auch nicht. Kann aber auch an der MySql Version liegen. MySQL 4.0.15

Mir wäre es lieber wenn ich die obigen Codes zusammen bringen könnte. Gibts da denn eine Möglichkeit?
 
Das funktioniert genauso gut wie das count Script was ich oben schon geschrieben habe. Hier ist aber auch wieder das Problem das ich es einfach nicht in die Ausgabe der Beiträge reinbekomme.

Ich muss irgendwie die ID aus der beitraege Tabelle bekommen damit die in das count Script in die var $id geschrieben wird.
 
Mal ein Beispiel:
PHP:
$posts=mysql_query("select * from posts order by id desc");
while ($post=mysql_fetch_assoc($posts)
{
 $comments=mysql_query("select * from comments where postid='".$post['id']."'");
 $num_comments=mysql_num_rows($comments);
 echo $post['title'].' - '.$num_comments.' comments<br>';
}

Ausserdem faellt mir auf, dass Deine While-Schleife da oben irgendwie schraeg ist, denn sie hat keine Klammern. Das Resultat daraus ist, dass nur das erste eval() ausgefuehrt wird. Aber das koennte auch gewollt sein, kann ich ja so nicht sagen.

Allgemein sollte man aber immer Klammern nutzen, ob nun bei IF, WHILE und wie sie nicht alle heissen.
Auch Einrueckung von Code kann nicht unsinnig sein, denn sowas kann die Lesbarkeit des Codes verbessern. ;)
 
Ohje, da hab ich mich auf was eingelassen. Bin in Sachen PHP nen Neuling und da sind so einige Sachen bei die mir noch nicht allzuviel sagen.

Jedenfalls hab ich es jetzt hinbekommen. Sieht nun ganz anders aus:
PHP:
<?
include("sqlfileedit.php");
$sql = "SELECT * FROM beitraege ORDER BY id DESC"; 
$ergebnis = mysql_query($sql)  or die (mysql_error()); 
while($row = mysql_fetch_object($ergebnis)) 
{ 
$id = $row->id;
$ueberschrift = $row->ueberschrift;
$text = $row->text;
$filename = $row->filename;
$name = $row->name;
$imgtext = $row->imgtext;
//$eintragvom = $row->eintragvom;

$result=mysql_query("SELECT * FROM commentbe WHERE beid='$id'"); 
$anz=mysql_num_rows($result); 
    
echo "<table width=\"100%\"  border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
echo "  <tr>";
echo "    <td>";
echo "      <table width=\"100%\"  border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
echo "        <tr>";
echo "          <td><h3>$ueberschrift</h3></td>";
echo "        </tr>";
echo "      </table></td>";
echo "  </tr>";
echo "  <tr>";
echo "    <td valign=\"top\"><table width=\"100%\"  border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
echo "        <tr>";
echo "          <td valign=\"top\"><table border=\"0\" align=\"left\" cellpadding=\"0\" cellspacing=\"0\">";
echo "              <tr>";
echo "                <td class=\"small\"><img src=\"beitraege/images/$filename\" alt=\"$imgtext\"></td>";
echo "                <td width=\"3\" class=\"small\"><img src=\"../../images/spacer.gif\" width=\"3\" height=\"3\"></td>";
echo "              </tr>";
echo "              <tr>";
echo "                <td class=\"small\">$imgtext</td>";
echo "                <td width=\"3\" class=\"small\"><img src=\"../../images/spacer.gif\" width=\"3\" height=\"3\"></td>";
echo "              </tr>";
echo "              <tr>";
echo "                <td height=\"3\" class=\"small\"><img src=\"../../images/spacer.gif\" width=\"3\" height=\"3\"></td>";
echo "                <td width=\"3\" height=\"3\" class=\"small\"><img src=\"../../images/spacer.gif\" width=\"3\" height=\"3\"></td>";
echo "              </tr>";
echo "            </table>";
echo "              $text</td>";
echo "        </tr>";
echo "        <tr>";
echo "          <td align=\"right\" valign=\"top\"><span class=\"small\"><a href=\"index.php?section=commentbe&id=$id\">$anz Kommentare</a></span></td>";
echo "        </tr>";
echo "    </table></td>";
echo "  </tr>";
echo "  <tr>";
echo "    <td height=\"10\" align=\"right\" valign=\"top\"><img src=\"../../images/spacer.gif\" width=\"1\" height=\"10\"></td>";
echo "  </tr>";
echo "  <tr>";
echo "    <td height=\"1\" valign=\"top\" bgcolor=\"716D52\"><span class=\"small\"><img src=\"../../images/spacer.gif\" width=\"1\" height=\"1\"></span></td>";
echo "  </tr>";
echo "  <tr>";
echo "    <td height=\"10\" valign=\"top\"><img src=\"../../images/spacer.gif\" width=\"1\" height=\"10\"></td>";
echo "  </tr>";
echo "</table>"; 
}
?>
Ausserdem faellt mir auf, dass Deine While-Schleife da oben irgendwie schraeg ist, denn sie hat keine Klammern. Das Resultat daraus ist, dass nur das erste eval() ausgefuehrt wird. Aber das koennte auch gewollt sein, kann ich ja so nicht sagen.
Hab das aus einen Script was mir ein Freund erstellt hat rausgenommen und vieles rausgeschnitten. Das blieb übrig und es funktioniert. Sobal ich aber um die beiden eval() 's {} mache, bekomm ich den letzen Beitrag doppelt angezeigt.
 
Na wenn's jetzt funktioniert ist ja gut. Dann denk bitte noch daran den Thread als erledigt zu markieren.
Code von anderen kann manchmal hilfreich sein, kann einem aber durchaus auch mal das Genick brechen. Am besten ist immer fleissig lernen und selbst schreiben.
 
Zurück