Ik ben bezig aan m'n eigen forum. In de DB zit een tabel, met allemaal topics. Deze hebben ook een veld categorie. Nu wil ik op de openingspagina gewoon alle categorieën aflopen, en weergeven hoeveel topics er in die categorie zijn. Ik heb dit al geschreven, maar nu zit ik vast! Ik weet niet hoe ik de while lus moet schrijven, of ben ik totaal verkeerd bezig?
<?php
$sql = mysql_query("SELECT * FROM forum GROUP BY catagorie ORDER BY id DESC") or die(mysql_error());
while ($rij = mysql_fetch_assoc($sql)){
$categorie = $rij['categorie'];
switch($categorie){
case 1: $categorienaam = "In het nieuws" ; $categorieomschrijving = "Jouw gedacht over de zonet gebeurde dingen!" ; break;
case 2: $categorienaam = "School" ; $categorieomschrijving = "Wat is er zoal gebeurd in dat gebouw? Of erbuiten?" ; break;
case 3: $categorienaam = "Spam" ; $categorieomschrijving = "Zeveren nondedju" ; break;
case 4: $categorienaam = "Freetime" ; $categorieomschrijving = "Een festival? Of uitstap? Vertel het hier!" ; break;
}
while ($categorieid
echo $categorienaam." - ".$categorieomschrijving;
}
}
?>
Het is niet zo heel moeilijk.
Je hebt 2 queries, 1 die de categorieën ophaalt, en in de while loop van die query zet je nog een query die het aantal topics per categorie telt:
<?PHP
// eerste query
// deze haalt de categorieën uit de tabel 'forumCats' op
$sQuery = "SELECT * FROM forumCats ORDER BY id DESC";
// uitvoeren
if(!$rResult = MySQL_Query($sQuery))
{
echo "Error!- Kan de query niet uitvoeren!<br />";
echo MySQL_Error()."<br />".MySQL_Errno();
} else
{
// while loop voor het weergeven
while($aFetch = MySQL_Fetch_Assoc($rResult))
{
// de 'tel-query'
// deze telt het aantal topics per categorie
$sQueryCount = "SELECT COUNT(id) AS totaal FROM forumTopics WHERE catID=".$aFetch['id'];
// uitvoeren
if(!$rResultCount = MySQL_Query($sQueryCount))
{
echo "Error!- Kan de query niet uitvoeren!<br />";
echo MySQL_Error()."<br />".MySQL_Errno();
} else
{
// echoën
echo $aFetch['naam']."<br />".$aFetch['omschrijving']."<br />".MySQL_Result($rResultCount, 0, "totaal")." topics<br /><br />";
}
}
}
?>
<?PHP
// eerste query
// deze haalt de categorieën uit de tabel 'forumCats' op
$sQuery="SELECT * FROM forumCats ORDER BY id DESC";
CREATE TABLE forumTopics (
id INT(11) NOT NULL auto_increment,
catID INT(11) NOT NULL,
titel VARCHAR(255) NOT NULL,
bericht TEXT NOT NULL,
datum VARCHAR(16) NOT NULL,
door VARCHAR(255) NOT NULL,
PRIMARY KEY(id)
);
#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 '0',
PRIMARY KEY (`id`),
) TYPE=MyISAM AUTO_INCREMENT=1' a
#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 ') TYPE = MYISAM AUTO_INCREMENT = 1' at line 1
Krijg ik dan... Ik heb het accent toegevoegd, maar nog steeds een error!
CREATE TABLE forumCats (
id INT(11) NOT NULL auto_increment,
naam VARCHAR(255) NOT NULL,
omschrijving TEXT(500) NOT NULL,
PRIMARY KEY(id)
);
CREATE TABLE forumTopics (
id INT(11) NOT NULL auto_increment,
catID INT(11) NOT NULL,
titel VARCHAR(255) NOT NULL,
bericht TEXT NOT NULL,
datum VARCHAR(16) NOT NULL,
door VARCHAR(255) NOT NULL,
PRIMARY KEY(id)
);
CREATE TABLE forumReacties (
id INT(11) NOT NULL auto_increment,
topicID INT(11) NOT NULL,
bericht TEXT NOT NULL,
datum VARCHAR(16) NOT NULL,
door VARCHAR(255) NOT NULL,
PRIMARY KEY(id)
);
Maar hoe kan ik nu het aantal berichten in een bepaalde categorie tellen?
Eigenlijk zou ik dan moeten kunnen zeggen: tel alle berichten die behoren aan een topic die behoort tot een bep categorie. Of gaat dat niet en moet ik gewoon bij iedere reactie nogmaals de categorie meegegeven, zodat het tellen makkelijker gaat?
Gebruik dan het volgende, maar geen MySQL_Num_Rows().
MySQL_Num_Rows() doorloopt nog eens alle rijen in je query, wat dus minder snel is als MySQL laten tellen en het resultaat ineens ophalen.
Kan een hoop schelen als je een druk forum hebt.
$sQuery = "SELECT COUNT(id) AS totaal FROM topics WHERE catID=".$iTopicID;
if(!$rResult = MySQL_Query($sQuery))
{
echo "Error!- Kan de query niet uitvoeren!<br />";
echo MySQL_Error()."<br />".MySQL_Errno();
} else
{
$iTotaal = MySQL_Result($rResult, 0, "totaal");
// $iTotaal bevat nu het aantal topics in een categorie
}
$sQuery="SELECT COUNT(id) AS totaal FROM topics WHERE catID=".$iTopicID;