Ik ben bezig met een klein forumpje te maken, nu heb ik een probleem:
De reacties worden verdeeld over pagina's met een normaal paginator script iedere reactie heeft ook een id zodat ik ernaar kan linken met een '#'. Maar ik weet echter niet op welke pagina een reactie zal terechtkomen, dus kan ik er geen link naar plaatsen (bvb. naar de laatste reactie). Hoe kan ik dit oplossen, moet ik dit opslaan in mijn database ofzo?
Elk bericht heeft toch al een uniek ID? Hoe ik het heb opgelost is een linkje bij elk bericht neerzetten die linkt naar het eigen bericht met een a-anchor, dus zoiets als:
Het is een globaal voorbeeld verder. Mocht je een pagina-verdeel-systeem (a.k.a pagination/paginator) gebruiken, dan kan je in de URL ook nog de paginagegevens meegeven.
Dit wordt ook vaak een permalink genoemd.
Ja maar de reacties worden verdeeld door het toaal aantal records te delen door het resultaten per pagina en dan met limit te werken, dus weet ik niet op welk paginanummer welke reactie precies terechtkomt. Ik weet wel dat ik het in mijn url kan zetten, maar ik weet niet wat ik er zou moeten inzetten want ik weet de pagina niet.
Hoe kan ik dit oplossen, moet ik dit opslaan in mijn database ofzo?
In eerste instantie zou ik zeggen nee, want het zou in principe dubbele data worden. Hoewel het uitrekenen op welke pagina iets zal verschijnen omslachtig is, kan het wel.
Alleen, op welke manier verdeel je de berichten over de pagina's? Ie het bijvoorbeeld oplopend op datum, per gebruiker, per topic etc? Kan de volgorde nog wel eens veranderen?
Maar ik bedoel in een overzicht, dat je de laatste topics kan zien of de topics waarop jij hebt gereageerd en er een link staat naar je laatste reactie maar ik kan die link niet genereren, want ik weet de pagina niet, ik weet dat het een ingewikkeld probleem is, want ik had eerst ook niet aan dit probleem gedacht. Dit is een voorbeeld: http://www.onemorething.nl/community/forum
@Erwin: De volgorde blijft steeds hetzelfde op datum gesorteerd, maar is berekenen niet te belastend?
Op de 2e pagina dus. Blijkbaar wordt het aantal reacties ook hier opgeteld (bij voorkeur het aantal opslaan in de database, zorgt voor minder belasting) en gedeeld door het aantal pagina's....
Dus als ik het goed begrijp sla ik naast het algemenen id een id op dat de volgorde binnen een bepaald topic (1,2,..) aanduid en dit id deel ik door het items per pagina? Ik denk dat dit wel zal werken.
Alleen zou ik dat niet doen, want als er iets verandert, of als je ooit eens een andere volgorde wilt laten zien ben je de klos....
Wat je wel kunt doen is een virtueel id toevoegen op basis waarvan je de positie bepaald. Ik ken je database structuur niet, maar voeg je eigen velden toe en probeer dit eens:
SET @teller := 0;
SELECT row_number, comment_id
FROM (
SELECT (@teller := @teller+1) AS row_number, comment_id
FROM tabel_x
ORDER BY ....
) AS temp_tabel
WHERE comment_id = ...;
Hier maak je dus on-the-fly een tabel aan waarbij je een row nummer toekent aan elke rij, waarbij alle rijen ook goed gesorteerd zijn. Daaruit selecteer je het juiste record (op id) en neem je ook de positie mee. Zo weet je dus de positie van dat record ten opzichte van de hele tabel en dus op welke pagina het zal komen.