Citaat:
Lil' Stef schreef op 02-07-2005 @ 15:19 :
Hallo allemaal,
Ik wil nu een vrij uitgebreid forum maken. Ik heb al meerdere standaard prikborden gemaakt, maar verder lukt alles wel, alleen wil ik, dat hij het aangeeft als iemand een topic gelezen heeft. Ik dacht om gewoon alle id's van de topics op te slaan, bij het user id. Maar dan heb ik duizenden velden nodig. Bij PHPBB gebuiken ze cookies. Maar dat snap echt niet.
Weet iemand hoe je dat moet doen??
Alvast bedankt,
Stefan
|
Inderdaad met cookies is het het makkelijkste en veruit het beste voor je prestaties.
Niets van duizenden velden, want dan raadpleeg je beter een boek 'relationele databases voor dummies' of iets dergelijks. Het is totaal onmogelijk om voor elk topic een veld aan te maken, want je zou dan elke keer een SQL-UPDATE-commando moete nsturen en dat doe je juist beter niet geautomatiseerd, lijkt me. Als je echt perfect zou willen bijhouden welk topic gelezen is, moet je met wat ik een linktabel noem werken tussen je users en je topics.
Een forum heeft meestal een tabel topics (of posts eventueel, afhankelijk van de structuur) en dan heb je nog je tabel users. Nu is het feit dat één user meerdere topics kan gelezen hebben en één topic kan door meerdere users gelezen geweest zijn. Dat is dus een veel-op-veel-relatie en dan heb je een extra tabel nodig: een linktabel. In zo'n tabel moet je enkel de primaire sleutel van beide tabellen die je wilt linken opnemen.
Code:
T: users
> userID (primaire sleutel)
> ...
T: topics
> topicID (primaire sleutel)
> ...
T: user_topic (linktabel)
> userID
> topicID
Bij het opvragen van de topics zou je dan kunnen nakijken of er al een combinatie userID-topicID die overeenkomt (userID komt van de huidige gebruiker, topicID van het topic dat opgevraagd wordt) en als dat niet het geval is, maak je een aan; Zo kun je dus bepalen of een topic gelezen geweest is als je het echt persé wilt doen met een database (en onafhankelijk van waar iemand inlogt).
Wat Dr. Hendre zegt klopt ook, dat valt eventueel op te lossen met een timestamp in de tabel user_topic en die te vergelijken met die van de laatste reply in het topic. Maar inderdaad zijn het zeer veel resources voor zo'n amper gebruikte functie. Het is volgens mij handiger om weer te geven of iemand gereageerd heeft in een topic. In je browser wordt toch meestal aangeklikte links in een andere kleur weergegeven (kan ook met CSS aangepast worden naar je eigen keuze) zodat je kan zien of je het topic gelezen hebt. En daar verspil je server-side geen resources aan