Aantal comments tellen uit MySQL database (per blog)

Status
Niet open voor verdere reacties.

Rozenknopje

Gebruiker
Lid geworden
25 jun 2007
Berichten
46
Hooiii

Mijn zoontje heeft een weblog. Hij wil graag dat onder elke blog komt te staan "(0) comments", oftewel, iets wat telt hoeveel comments er staan. Aangezien er nu alleen "comments" staat, is het wel mooier als mensen meteen kunnen zien hoeveel comments (per blog) er zijn gepost door bezoekers.

Dus mijn vraag is: hoe krijg ik dat "(0)" erbij, die telt hoeveel comments er zijn geplaatst?

Als je de code wil zien van het commenten of de structuur van de MySQL, dan moet je dat maar vragen. Ik hoop dat jullie kunnen helpen!!
 
Kan dat niet met count? Ik zou het niet met zekerheid kunnen zeggen hoor, so correct me if I'm wrong!
 
Bedankt voor je antwoord.

Volgens mij kan je dan alleen waardes uit PHP variabelen/arrays halen. Ik wil juist dat ie het aantal optelt uit de MySQL database, en dat aantal weergeeft.
 
MySQL kent ook een COUNT ;)

[sql]
SELECT
COUNT(*) AS total
FROM tabel
WHERE blog_id='1'
[/sql]
 
De tabel heet "comments", de ID's van de comments heet comment_id en de ID's van de blogs heet post_id.

Hoe moet ik de PHP/MySQL code neerzetten dan? Ik wil graag dat het automatisch per post_id (oftewel per blog) de hoeveelheid comments berekent.

Sorry als het misschien domme vragen zijn, maar ik kon niks vinden op google.
 
query

$database->exec("select count(1) from comments where post_id = ".intval( $postID ));

Hierbij is $postID het ID van de post waaronder het getal moet verschijnen.

Domme vragen bestaan niet :)
 
$database->exec("select count(1) from comments where post_id = ".intval( $postID ));

Hierbij is $postID het ID van de post waaronder het getal moet verschijnen.

Domme vragen bestaan niet :)

Bedankt voor je antwoord! Alleen krijg ik met deze code een error:
Parse error: syntax error, unexpected T_IF in home.php on line 5 .. Ik plaats het in de home.php, dat is het bestand die de blogs weergeeft vanuit het database.

Ik ben helaas niet zo heel goed met PHP..
 
Laatst bewerkt:
Parse error betekent zoveel als een taalfout in php, bijvoorbeeld omdat je een puntkomma bent vergeten.

waarschijnlijk herkend mysql $database niet als je het direct hebt geknipt en geplakt. Ik weet niet hoe je je database benaderd in jouw script, een stukje code zou handig zijn om je verder te helpen. Aangenomen dat je helemaal geen database wrapper gebruikt zou ik dan zeggen dat:

mysql_query("select count(1) from comments where post_id = ".intval( $postID ));

wel moet werken, maar nogmaals zonder de code te zien blijft het wel een beetje gissen wat werkt.
 
Parse error betekent zoveel als een taalfout in php, bijvoorbeeld omdat je een puntkomma bent vergeten.

waarschijnlijk herkend mysql $database niet als je het direct hebt geknipt en geplakt. Ik weet niet hoe je je database benaderd in jouw script, een stukje code zou handig zijn om je verder te helpen. Aangenomen dat je helemaal geen database wrapper gebruikt zou ik dan zeggen dat:

mysql_query("select count(1) from comments where post_id = ".intval( $postID ));

wel moet werken, maar nogmaals zonder de code te zien blijft het wel een beetje gissen wat werkt.

Ik zal eerst eens proberen met de code die je net gaf.

Hier alvast een stukje van de code:
(de login en password heb ik even weggehaald hoor)
<?php
// Verbinding met Database
$db = mysql_connect("localhost", "login", "password")
or die("Could not connect to database.");
mysql_select_db("dbname",$db);

// Laat alleen de laatste 5 posts zien op de index.
$sql = "SELECT post_id, title, post, DATE_FORMAT(postdate, '%d %M %Y') AS date FROM posts ORDER BY postdate DESC LIMIT 5";
$result = mysql_query($sql);
$myposts = mysql_fetch_array($result);
?>

EDIT: Nu krijg ik overal "Resource id #6" te zien, waar ik die variabel neerzet. Ik doe dan $aantal = de code die je net gaf.
 
Laatst bewerkt:
query

PHP:
// Verbinding met Database
$db = mysql_connect("localhost", "login", "password")
or die("Could not connect to database.");
mysql_select_db("dbname",$db);

// Laat alleen de laatste 5 posts zien op de index.
$sql = "SELECT p.post_id, 
(SELECT count( * ) FROM comments WHERE post_id = p.id ) AS aantalcomments,
p.title, p.post, DATE_FORMAT(p.postdate, '%d %M %Y') AS date FROM posts AS p ORDER BY p.postdate DESC LIMIT 5";
$result = mysql_query($sql);
$myposts = mysql_fetch_array($result);
het gaat alleen op als er een verbinding is tussen de twee tabellen, dus als er een post_id staat in de comments tabel, maar ik neem aan dat dat wel het geval is. Ook moet je database hiervoor subqueries ondersteunen.
 
Laatst bewerkt door een moderator:
Ik kom hier niet uit.. Ik probeerde die code van jou al, maar krijg weer allerlei errors.
 
Sorry voor de dubbele post. Ik ben even wezen puzzelen er mee. Het blijkt dat het op deze manier wel werkt:

Code:
$aantalcomments = mysql_query("SELECT count(1) AS total FROM comments WHERE post_id");

$t=mysql_fetch_array($aantalcomments); 

echo $t['total'];

Alleen nu telt hij alle comments van alle blogs, hoe kan ik doen dat ie alleen per blog telt??

(overigens die intval die je eerder gaf werkte niet helaas :()
 
Maak van:

PHP:
$aantalcomments = mysql_query("SELECT count(1) AS total FROM comments WHERE post_id");

PHP:
$aantalcomments = mysql_query("SELECT count(1) AS total FROM comments WHERE post_id = " . $idvandeblog);

EDIT: misschien niet helemaal duidelijk. Voeg = " . $idvandeblog toe.
 
Bedankt voor je antwoord, alleen ik krijg dan de error:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in htdocs/include/home.php on line 5

Ik weet dat mijn blog ID "$post_id" is, omdat ik het in de vorige code ook moest gebruiken. Voor bijv: <a href='post.php?post_id=$post_id'>Permalink</a>

Ik moet toch wel dezelfde variable nog een keer kunnen gebruiken in de code?
 
Laatst bewerkt:
Volgens mij moeten er nog enkele aanhalingstekens omheen:
PHP:
$aantalcomments = mysql_query("SELECT count(1) AS total FROM comments WHERE post_id = '" . $idvandeblog . "'");
of
PHP:
$aantalcomments = mysql_query("SELECT count(1) AS total FROM comments WHERE post_id = '$idvandeblog'");

Persoonlijk vind ik de tweede manier makkelijker, maar daarover verschilt men van mening.
 
Kan, maar is niet nodig bij een integer value.

De tweede manier is inderdaad makkelijker, maar ik vind de eerste manier netter en overzichtelijker.
 
Volgens mij moeten er nog enkele aanhalingstekens omheen:
PHP:
$aantalcomments = mysql_query("SELECT count(1) AS total FROM comments WHERE post_id = '" . $idvandeblog . "'");
of
PHP:
$aantalcomments = mysql_query("SELECT count(1) AS total FROM comments WHERE post_id = '$idvandeblog'");

Persoonlijk vind ik de tweede manier makkelijker, maar daarover verschilt men van mening.

Bij beide krijg ik "0 comments" steeds. Zijn er nog meer mogelijkheden? Of moet ik bijv: $t=mysql_fetch_array($aantalcomments); anders zetten?

Overigens werkt $post_id wel gewoon, als ik het echo. Dus als ik $post_id echo op de derde blog, dan geeft het gewoon braaf nummer 3.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan