login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Forum

Offline Frederic - 10/07/2005 22:49
Avatar van FredericPHP ver gevorderde 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?
  1. <?php
  2. $sql = mysql_query("SELECT * FROM forum GROUP BY catagorie ORDER BY id DESC") or die(mysql_error());
  3. while ($rij = mysql_fetch_assoc($sql)){
  4. $categorie = $rij['categorie'];
  5. switch($categorie){
  6. case 1: $categorienaam = "In het nieuws" ; $categorieomschrijving = "Jouw gedacht over de zonet gebeurde dingen!" ; break;
  7. case 2: $categorienaam = "School" ; $categorieomschrijving = "Wat is er zoal gebeurd in dat gebouw? Of erbuiten?" ; break;
  8. case 3: $categorienaam = "Spam" ; $categorieomschrijving = "Zeveren nondedju" ; break;
  9. case 4: $categorienaam = "Freetime" ; $categorieomschrijving = "Een festival? Of uitstap? Vertel het hier!" ; break;
  10. }
  11. while ($categorieid
  12. echo $categorienaam." - ".$categorieomschrijving;
  13. }
  14.  
  15. }
  16. ?>

8 antwoorden

Gesponsorde links
Offline Rens - 11/07/2005 00:15
Avatar van Rens Gouden medaille

Crew algemeen
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:

  1. <?PHP
  2. // eerste query
  3. // deze haalt de categorieën uit de tabel 'forumCats' op
  4. $sQuery = "SELECT * FROM forumCats ORDER BY id DESC";
  5. // uitvoeren
  6. if(!$rResult = MySQL_Query($sQuery))
  7. {
  8. echo "Error!- Kan de query niet uitvoeren!<br />";
  9. } else
  10. {
  11. // while loop voor het weergeven
  12. while($aFetch = MySQL_Fetch_Assoc($rResult))
  13. {
  14. // de 'tel-query'
  15. // deze telt het aantal topics per categorie
  16. $sQueryCount = "SELECT COUNT(id) AS totaal FROM forumTopics WHERE catID=".$aFetch['id'];
  17. // uitvoeren
  18. if(!$rResultCount = MySQL_Query($sQueryCount))
  19. {
  20. echo "Error!- Kan de query niet uitvoeren!<br />";
  21. } else
  22. {
  23. // echoën
  24. echo $aFetch['naam']."<br />".$aFetch['omschrijving']."<br />".MySQL_Result($rResultCount, 0, "totaal")." topics<br /><br />";
  25. }
  26. }
  27. }
  28. ?>


Je tabel structuur zou er als volgt uit kunnen zien:

  1. CREATE TABLE forumCats (
  2. id INT(11) NOT NULL auto_increment,
  3. naam VARCHAR(255) NOT NULL,
  4. omschrijving TEXT(500) NOT NULL,
  5. PRIMARY KEY(id)
  6. );


en:

  1. CREATE TABLE forumTopics (
  2. id INT(11) NOT NULL auto_increment,
  3. catID INT(11) NOT NULL,
  4. titel VARCHAR(255) NOT NULL,
  5. bericht TEXT NOT NULL,
  6. datum VARCHAR(16) NOT NULL,
  7. door VARCHAR(255) NOT NULL,
  8. PRIMARY KEY(id)
  9. );


In catID (in forumTopics) staat dus het ID uit de tabel 'forumCats'
Offline Frederic - 11/07/2005 11:55
Avatar van Frederic PHP ver gevorderde Dat ziet er al goed uit, en dat kan ik zeker gebruiken! Nu heb ik alleen nog een probleempje bij het aanmaken van de tabellen:
  1. CREATE TABLE forum_categorieen (
  2. id INT(11) NOT NULL auto_increment,
  3. naam VARCHAR(255) NOT NULL,
  4. omschrijving TEXT NOT NULL,
  5. PRIMARY KEY(id)
  6. );
  7.  
  8. CREATE TABLE `forum_topic` (
  9. `id` int(10) unsigned NOT NULL auto_increment,
  10. `lid` INT(11) default NULL,
  11. `categorie` INT(11) default NULL,
  12. `titel` text,
  13. `bericht` text,
  14. `datum` varchar(12) default NULL,
  15. `tijd` time default NULL,
  16. `ip` varchar(20) default NULL,
  17. `hostmask` varchar(80) default NULL,
  18. `hits` int(5) NOT NULL default '0',
  19. `laatste_reactie` datetime default '0000-00-00 00:00:00,
  20. `aantal_reacties` int(11) NOT NULL default '0',
  21. PRIMARY KEY (`id`),
  22. ) TYPE=MyISAM AUTO_INCREMENT=1 ;

errort in
Citaat:
Er schijnt een fout te zijn in uw SQL query. Mocht de MySQL server een error hebben terug gegeven, probeer dan of uw hiermee uw fout kunt oplossen.

ERROR: Quote niet afgesloten @ 458
STR: '
SQL: CREATE TABLE `forum_topic` (
`id` int(10) unsigned NOT NULL auto_increment,
`lid` INT(11) default NULL,
`categorie` INT(11) default NULL,
`titel` text,
`bericht` text,
`datum` varchar(12) default NULL,
`tijd` time default NULL,
`ip` varchar(20) default NULL,
`hostmask` varchar(80) default NULL,
`hits` int(5) NOT NULL default '0',
`laatste_reactie` datetime default '0000-00-00 00:00:00,
`aantal_reacties` int(11) NOT NULL default '0',
PRIMARY KEY (`id`),
) TYPE=MyISAM AUTO_INCREMENT=1 ;

SQL-query :

CREATE TABLE `forum_topic` ( `id` int(10) unsigned NOT NULL auto_increment, `lid` INT(11) default NULL, `categorie` INT(11) default NULL, `titel` text, `bericht` text, `datum` varchar(12) default NULL, `tijd` time default NULL, `ip` varchar(20) default NULL, `hostmask` varchar(80) default NULL, `hits` int(5) NOT NULL default '0', `laatste_reactie` datetime default '0000-00-00 00:00:00, `aantal_reacties` int(11) NOT NULL default '0', PRIMARY KEY (`id`), ) TYPE=MyISAM AUTO_INCREMENT=1 ;

MySQL retourneerde:

#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
Offline Rens - 11/07/2005 13:22
Avatar van Rens Gouden medaille

Crew algemeen
  1. `laatste_reactie` datetime default '0000-00-00 00:00:00


En quote (') vergeten:p
Offline Frederic - 11/07/2005 14:46
Avatar van Frederic PHP ver gevorderde
Citaat:
Fout

SQL-query :

CREATE TABLE `forum_topic` (

`id` int( 10 ) unsigned NOT NULL AUTO_INCREMENT ,
`lid` INT( 11 ) default NULL ,
`categorie` INT( 11 ) default NULL ,
`titel` text,
`bericht` text,
`datum` varchar( 12 ) default NULL ,
`tijd` time default NULL ,
`ip` varchar( 20 ) default NULL ,
`hostmask` varchar( 80 ) default NULL ,
`hits` int( 5 ) NOT NULL default '0',
`laatste_reactie` datetime default '0000-00-00 00:00:00',
`aantal_reacties` int( 11 ) NOT NULL default '0',
PRIMARY KEY ( `id` ) ,

) TYPE = MYISAM AUTO_INCREMENT = 1

MySQL retourneerde:


#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!
Offline Tuinstoel - 11/07/2005 15:38
Avatar van Tuinstoel PHP expert de komma na PRIMARY KEY (`id`) moet weg
Offline Frederic - 11/07/2005 20:34
Avatar van Frederic PHP ver gevorderde ik heb nu 3 tabellen:
Citaat:
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?
Offline Dolfje - 11/07/2005 20:59
Avatar van Dolfje Gouden medailleGouden medailleGouden medaille

PHP ver gevorderde
$query = mysql_query("SELECT * FROM topics WHERE ...");
mysql_num_rows($query)
Offline Rens - 11/07/2005 22:47
Avatar van Rens Gouden medaille

Crew algemeen
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.
  1. $sQuery = "SELECT COUNT(id) AS totaal FROM topics WHERE catID=".$iTopicID;
  2. if(!$rResult = MySQL_Query($sQuery))
  3. {
  4. echo "Error!- Kan de query niet uitvoeren!<br />";
  5. } else
  6. {
  7. $iTotaal = MySQL_Result($rResult, 0, "totaal");
  8. // $iTotaal bevat nu het aantal topics in een categorie
  9. }
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.229s