Laatste post op forumindex

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Arjan -

Arjan -

06/10/2010 22:51:12
Quote Anchor link
Hey,

Op mijn forum heb ik een forumindex met alle categorieën, subcategorieën en de laatste topic waarin gereageerd is per subcategorie.

Nu nog maak ik gebruik van één aparte query per subcategorie om te kijken in welk topic het laatst gereageerd is en deze vervolgens te tonen ter plaatse van de bijbehorende subcategorie.

Het aantal queries op deze pagina (forumindex) is daarom best hoog (momenteel 70 queries op deze pagina (doordat er wel 70 subcategorieën zijn)). Dit wil ik graag reduceren. Maar ik ben er nog niet echt achter wat de beste methode is om dit te doen.
Is het wellicht verstandig om een view te maken voor de forumindex pagina, zodat met één query alle items voor de forumindex opgehaald kunnen worden?

Mijn databasestructuur voor het forum is als volgt:

forum_cats (alle categorieën)
forum_subcats (alle subcategorieën)
forum_topics (id,titel,datum,etc.)
forum_posts (alle gegevens van de berichten in de topic)

Hebben jullie tips om dit efficiënter aan te pakken?
Gewijzigd op 06/10/2010 22:51:56 door Arjan -
 
PHP hulp

PHP hulp

23/11/2024 14:44:40
 

06/10/2010 23:00:12
Quote Anchor link
Arjen - op 06/10/2010 22:51:12:
(...)

Mijn databasestructuur voor het forum is als volgt:

forum_cats (alle categorieën)
forum_subcats (alle subcategorieën)
forum_topics (id,titel,datum,etc.)
forum_posts (alle gegevens van de berichten in de topic)

Hebben jullie tips om dit efficiënter aan te pakken?


Volgens mij is jou db structuur niet zo.
Verder moet je je afvragen of je subcategorieën in een aparte tabel wilt.
 
Pieter Jansen

Pieter Jansen

07/10/2010 00:52:04
Quote Anchor link
Dat hoef je je niet eens af te vroegen, gewoon samen voegen. Het enige verschil tussen cats en subcats is dat subcats een ouder nodig hebben. Voeg deze samen, voeg een veldje toe voor je parent_id en zorg ervoor dat de default waarde gelijk is aan 0.

De rest wijst zich hopelijk vanzelf ;)

Ook vraag ik me af waarom er een verschil moet zijn tussen topics en posts? Als je een topic aanmaakt, kun je toch voor alle volgende posts een veldje toevoegen?

oftewel:
POST
post_id,
isTopic ( set '0','1' )
parent_id

Parent_id krijgt dus de post_id mee voor het topic waar op gereageerd wordt. Dit mag natuurlijk alleen als die POST dus ook een isTopic gelijk aan 1 is.

Verder krijgt elke POST toch ook een ID mee, net als een titel en Datum? Waar titel optioneel is?

Volgens mij hoef je dit verder niet echt te abstraheren. Er is verder niets unieks aan een topic, dus als het enige verschil dus id, titel en datum is, zou ik het gewoon in 1 tabel zetten.
 
Arjan -

Arjan -

07/10/2010 07:51:11
Quote Anchor link
Bedankt voor jullie reacties. Wat betreft de subcategorieën, daar ben ik het mee eens.

Maar een topic heeft een titel, geeft aan of een topic gesloten is of een sticky betreft, etc.

Dus een topic heeft wel degelijk andere eisen. Het eerste bericht in een topic is eigenlijk niets anders dan een normale post in deze topic, vandaar dat ik topic en posts heb gescheiden.

Overigens dwalen jullie een beetje af van mijn vraag, want mijn vraag blijft nog gewoon staan. Hoe kan ik het beste per subcategorie het laatst gereageerde topic tonen, zonder daarvoor bij elke subcategorie een nieuwe query te moeten maken?
 
Milo S

Milo S

07/10/2010 08:34:48
Quote Anchor link
Dat geeft merijn redelijk aan in zijn eerste alinea.

Hij zegt namelijk dat je de 2 tabellen moet samenvoegen en er 1 ouder id aan toe moet voegen.
Kijk anders even in het andere topic daar gaan ze namelijk in op precies dezelfde vraag.
 
Arjan -

Arjan -

07/10/2010 12:46:46
Quote Anchor link
Ik geef ook aan dat wat betreft de categorieën ik het er mee eens ben, echter is het zoals ik vermeld wel verstandig om topics (met andere gegevens) apart te houden van de daadwerkelijk posts. De posts horen binnen een bepaald topic (titel, sticky, gesloten, etc.). Dit is een wezenlijk verschil met de berichten in dat topic (waarvan het eerste bericht ook de topicstart is.
Ook bij het verwijderen van een topic kan je nu eenvoudig alle berichten verwijderen middels een foreign key, wat in het geval van 1 tabel niet mogelijk is (je kan wel de parentid opvragen en deze allemaal verwijderen, maar dat is (iets) omslachtiger).

Maar dit gaat allemaal niet over mijn beginvraag. Dat de topics los staan van de categorieën lijkt mij logisch, dus de beginvraag staat nog steeds.....

Jullie gaan in op het normaliseren (op mijn manier is het ook een vorm van normaliseren) van de tabellen, maar daar vroeg ik volgens mij niet naar.
Gewijzigd op 07/10/2010 12:52:26 door Arjan -
 
Pieter Jansen

Pieter Jansen

07/10/2010 15:07:41
Quote Anchor link
Nou, hoe bedoel je die begin vraag dan? Want je kunt toch een query maken die alle recent aangemaakte subcategorieen ophaalt?

Maar dat bedoel ik je niet, even kijken: je wil 1 query welke er voor zorgt dat je een overzicht krijgt van alle (recente) posts van elke categorie.

Dus zou je in een categorie een veldje moeten maken waar de datum instaat van het laatst geposte bericht.

dus:

Categorie:
INT cat_id,
VARCHAR naam,
INT ouder_id,
TIMESTAMP laatste_post

Nu kun je er makkelijk door heen lussen. Je kunt het ook anders doen ,maar dan moet je alle posts bij na, filteren op zowel datum alsook categorie, wat de query niet ten goed komt.
 
Arjan -

Arjan -

07/10/2010 15:20:22
Quote Anchor link
Wat ik inderdaad wil is voor elke subcategorie, op de pagina met een overzicht van alle categorieen, de topic waarin het laatst gereageerd is weergeven.

Ik had zelf ook gedacht aan jouw oplossing alleen kleeft er een groot nadeel aan, namelijk wanneer de moderator de laatste reactie binnen een topic verwijderd dan kloppen de gegevens niet meer en moeten dus de gegevens van de een na laatste post worden opgehaald en geplaatst worden in de tabel met categorieen.

Ik dacht zelf om 1 query te maken die alle laatste berichten binnen de subcategorieen ophaalt. Vervolgens controleer ik per subcategorie of er relevante waarde in de teruggekregen array zit. Is dit in jullie ogen een goede oploasing? Hierdoor heb je maar 1 extra query nodig.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.