Newsscript-Kommentare zählen

Z

Zank

Schönen guten Abend,

habe ein kleines Problem mit meinem Newsscript. Aber erstmal zu den tabellen:

Tabelle news:
id
titel
inhalt
author
email
source
datum

tabelle news_kommentare
com_id
news_id
name
email
comment

Auf meiner index.php werden die News perfekt angezeigt. Auch die Kommentarfunktion klappt wunderbar. Nun möchte ich aber, dass unter jeder News auf der Startseite zu sehen ist, wie viele Kommentare bereits geschrieben wurden.

Ich bekomme das einfach nicht hin! Wie sieht der korrekte Befehl zur Abfrage aus der Datenbank aus? Geht das überhaupt, wenn man zwei Tabellen hat?

Bin für jeden Rat dankbar, bin echt langsam am verzweifeln!

Grüße,
Zank
 
Hallo!

Kannst zuerst die betreffende Newsid aus Tabelle 1 ermitteln

Bsp: $newsidaustabelle1= "2"

und dann mit

mysql_query("SELECT COUNT(*) FROM tabelle2 WHERE news_id=$newsidaustabelle1")

die Anzahl aller Einträge in Tabelle 2 mit dieser newsid abfragen.

Grüße

Martin
 
Das ist ein SQL bzw in deinem Falle ein MySql-Problem.
Code:
SELECT `a`.`id`,`a`.`titel`,`a`.`inhalt`,`a`.`author`,`a`.`email`,`a`.`source`,
              DATE_FORMAT(`a`.`datum`,'%d.%m.%y | %H:%i') AS `dato`,count(`b`.`com_id`) AS `count`
              FROM `news` AS `a`
              LEFT OUTER JOIN `news_kommentare` AS `b` ON `a`.`id` = `b`.`news_id`
              GROUP BY `a`.`id`
              ORDER BY `a`.`id` DESC LIMIT $start,$Smax;

mfg
 
Bin vom vielen Coden total durcheinander @ Descartes!
Wie würde Dein Vorschlag denn an meinem Beispiel aussehen?

Habe Dir mal den Code kopiert, mit dem ich die News auslesen lasse!


PHP:
<?php

$sql_query = "SELECT * FROM zklab_news ORDER BY id DESC";
        
$result = mysql_query($sql_query, $mysql_connect);

while ($row = mysql_fetch_object($result))
{

echo "
<table width='100%'  border='1' cellpadding='0' cellspacing='0' bordercolor='#000000'>
  <tr>
    <td><table width='100%' border='0' cellpadding='0' cellspacing='0'>
      <tr bgcolor='#8D4A44'>
        <td width='42%'><span class='text_head'><b>// $row->titel</b></span></td>
        <td width='58%'><div align='right'><span class='text_head'><b>$row->datum Uhr by <a href='mailto:$row->email'>$row->author</b></span></a></div></td>
      </tr>
      <tr bgcolor='#F8F8F8'>
        <td colspan='2'><span class='text'>";
		echo nl2br ("$row->inhalt");
		echo "</span></td>
        </tr>
      <tr bgcolor='#B8716B'>
        <td><span class='text_head'><b>Source:</b> <a href='$row->source' target='_blank'>$row->source</span></a></td>
        <td><div align='right'><span class='text_head'><a href='index.php?section=news_comments&id=$row->id'>Kommentare: [0]</span></a></div></td>
      </tr>
    </table></td>
  </tr>
</table><br>";
}

mysql_free_result($result);
        
?>
 
Hallo!

Da mein Vorschlag auf 2 aufeinanderfogenden Querys beruht, würde ich Dir das query von Online Skater empfehlen, da diese zwar auf den ersten Blick schwieriger erscheint, aber nur ein query benoetigt.

SELECT `a`.`id`,`a`.`titel`,`a`.`inhalt`,`a`.`author`,`a`.`email`,`a`.`source`,
DATE_FORMAT(`a`.`datum`,'%d.%m.%y | %H:%i') AS `dato`, count(`b`.`com_id`) AS `count`
FROM `news` AS `a`
LEFT OUTER JOIN `news_kommentare` AS `b` ON `a`.`id` = `b`.`news_id`
GROUP BY `a`.`id`
ORDER BY `a`.`id` DESC LIMIT $start,$Smax;

Die Anfrage kannst Du komplett so uebernehmen, nur $start, und $max mußt Du noch festlegen. $start ist dabei die Zeile, nach der die Abfrage beginnen soll, $max die Zeilenanzahl, die abgefragt werden soll.

Aus dem MySQL Handbuch:
select * from tabelle LIMIT 5,10; # Zeilen 6 bis 15 zurückgeben

Auf das (formatierte) Datum kannst Du mit $row->dato, auf die Kommentaranzahl mit $row->count zugreifen.

Rest ist wie gehabt, also $row->inhalt, $row->source etc.

Grüße

Martin
 
Hey...habe nun alles gemacht, was Du gesagt hast!

PHP:
<?php

$count_query = "
(SELECT `a`.`id`,`a`.`titel`,`a`.`inhalt`,`a`.`author`,`a`.`email`,`a`.`source`,
DATE_FORMAT(`a`.`datum`,'%d.%m.%y | %H:%i') AS `dato`, count(`b`.`com_id`) AS `count`
FROM `news` AS `a`
LEFT OUTER JOIN `zklab_news_comments` AS `b` ON `a`.`id` = `b`.`news_id`
GROUP BY `a`.`id`
ORDER BY `a`.`id` DESC LIMIT 0, 10)";

$result = mysql_query($count_query, $mysql_connect);

while ($row = mysql_fetch_object($result))
{

echo "
<table width='100%'  border='1' cellpadding='0' cellspacing='0' bordercolor='#000000'>
  <tr>
    <td><table width='100%' border='0' cellpadding='0' cellspacing='0'>
      <tr bgcolor='#8D4A44'>
        <td width='42%'><span class='text_head'><b>// $row->titel</b></span></td>
        <td width='58%'><div align='right'><span class='text_head'><b>$row->dato Uhr by <a href='mailto:$row->email'>$row->author</b></span></a></div></td>
      </tr>
      <tr bgcolor='#F8F8F8'>
        <td colspan='2'><span class='text'>";
		echo nl2br ("$row->inhalt");
		echo "</span></td>
        </tr>
      <tr bgcolor='#B8716B'>
        <td><span class='text_head'><b>Source:</b> <a href='$row->source' target='_blank'>$row->source</span></a></td>
        <td><div align='right'><span class='text_head'><a href='index.php?section=news_comments&id=$row->id'>Kommentare: [$row->count]</span></a></div></td>
      </tr>
    </table></td>
  </tr>
</table><br>";
}

mysql_free_result($result);
        
?>

Jetzt bekomm eich ständig folgende Fehlermeldung:

PHP:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/www/htdocs/blablablub/section/news.php on line 13

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /home/www/htdocs/blablablub/section/news.php on line 40

Ich verzweifle hier echt!
 
Ein wenig überlegen schadet nicht. Deine Tabelle heißt auch anders siehe oben ...
zklab_news ggf. auch Spaltennamen anpassen ich habe das ma eben so schnell hingeschrieben ohne deine Spalten 100%ig zu kennen

Versuche ggf. auch den Query zu verstehen.

-->Ergebnisse aus Tabelle zklab_news werden mit der tabelle zklab_comments? gekoppelt und zwar von news nach comments (LEFT JOIN)
 
Zuletzt bearbeitet:
YUHU...nun funktioniert alles!

@ Online Skater
Hast ja recht, aber nach 4-5 Stunden geht einem die Konzentration dann doch schon derbe flöten!

Auf jeden Fall ein dickes Dankeschön an alle Helfer, insbesondere Descartes und Online Skater!
 
Zurück