Toon posts:

[PHP] Cookies/Mysql/Updates: Kan dit efficiënter?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi allemaal!

Vandaag heb ik weer wat geklooid aan mijn website, en ik heb wat afgemaakt, maar ik vraag me toch af of het efficiënter/beter kan. Ik leg het even uit:

Mijn website heeft een news sectie, waar dus (nee joh?) nieuwsposten gedaan worden. Op die nieuwsposten kunnen de lezers ook comments posten, en zo kunnen er dus discussies onstaan. Nu wou ik dat de gebruiker bij elke visit perfect weet hoeveel nieuwe comments er geplaatst zijn op elke newspost x.

Eerst had ik dat opgelost door simpelweg de datum van zijn laatste bezoekje in een cookie op te slaan, en die te vergelijken met de laatste comment. Dit werkt perfect als er maar 1 nieuwspost zou zijn op de site, maar ik moet dus een onderscheid kunnen maken tussen alle nieuwsposten (dus elke nieuwspost heeft een andere "bezoekdatum"). Want als er bijvoorbeeld 5 newsposten zijn met nieuwe comments, en de gebruiker heeft maar net tijd om er 3 te bezoeken, dan worden die overige 2 newposten niet meer als "updated" aanzien!

Nu heb ik het zo opgelost:
· Bij het inloggen op de site controleer ik of de gebruiker reeds een ID nummer heeft (wat zich in de cookie bevindt). Is dit niet zo, dan maak ik een unieke ID nummer aan en zet die in de cookie van de gebruiker.
· Als een gebruiker (die heeft dus ondertussen reeds een ID nummer) op een newspost klikt, ga ik in de mysql dbase kijken wat zijn laatste bezoek was op die newspost. Zo kan ik zien of hij er ooit al geweest is en wanneer(zo nee: alle comments zijn nieuw voor hem, zo ja: ahv. de datum kan ik perfect het aantal nieuwe comments uitrekenen).
· Bij het klikken op een nieuwspost update ik de gebruiker zijn dautm van die nieuwspost in de dbase.

ECHTER:

Volgens mij is dit niet erg efficiënt: Stel je voor dat de website +/- 50 regelmatige bezoekers heeft en dat er om de 2/3 dagen een nieuwspost wordt gedaan. Dat houdt dus in dat er voor 1 nieuwspost al 1 * 50: 50 rijen gereserveerd worden in de mysql dbase, om de datum bij te houden. Twee à drie nieuwsposten per week bekent dus +/- 150 rijen per week. Op jaarbasis is dit 7800! En dit nog maar slechts voor 50 gebruikers!

Mijn vraag is nu: kan dit niet veel simpeler? Ik heb er hard over nagedacht, maar volgens mij was de enige oplossing dat ik elke datum van elke gebruiker van elke nieuwspost apart moest opslaan in de dbase. Maar hoe doen die sites met duizenden bezoekers dat dan? De search was niet zo'n succes :( (allemaal standaardvragen over cookies)

Allemaal bedankt :7

EDIT: de tabel in mysql heeft dus bijv. volgende kolommen:
· id
· user_id
· newspost_id
· lastvisit_datetime

Verwijderd

Ik heb hier ooit eens een thread over geopent.. je kunt het als volgd op lossen.. maak een koekje die op deze wijze is gevuld:
12|25|17|22|23

dit zijn de id nummers van de nieuws items die je hebt gezien..
PHP:
1
<?$gezien = explode("|",$koekje);if(!in_array($nieuwsid,$gezien))  echo "Deze heb je nog niet gezien";?>

Vul je string stijgend/gelijk.. zodat je makkelijk kunt zorgen dat je koekje niet te groot word

Verwijderd

Topicstarter
Op vrijdag 15 maart 2002 20:30 schreef TimD het volgende:
Ik heb hier ooit eens een thread over geopent.. je kunt het als volgd op lossen.. maak een koekje die op deze wijze is gevuld:
12|25|17|22|23

dit zijn de id nummers van de nieuws items die je hebt gezien..
PHP:
1
<?$gezien = explode("|",$koekje);if(!in_array($nieuwsid,$gezien))  echo "Deze heb je nog niet gezien";?>

Vul je string stijgend/gelijk.. zodat je makkelijk kunt zorgen dat je koekje niet te groot word
Bedankt voor je reply!

Het gaat hier niet om "het al dan niet gezien hebben van een newspost", maar "het bijhouden wanneer je die nieuwspost bezocht hebt". Ik kan misschien beter een voorbeeldje geven:

Stel je voor, er is een nieuwspost "blah" op de website. Op die nieuwspost zijn er 6 comments gedaan. Gebruiker x komt op de website voor de eerste keer: hij heeft deze 6 comments dus nog nooit gelezen. Hij bekijkt de nieuwspost en leest alle comments. Dan bezoekt hij de website voor 2 dagen niet meer, maar ondertussen plaatsen wel andere gebruikers nieuwe comments op die nieuwpost. Hier gaat het nu om: na 2 dagen komt hij weer op de site: hij heeft de nieuwspost dus wel al gelezen, maar er zijn ondertussen nieuwe comments gedaan op die nieuwspost, en dat moet hem getoond worden.

Moraal: Ik moet dus de datum van elke nieuwspost-visit opslaan, en niet opslaan of hij al ooit die nieuwspost gelezen heeft ja of nee.

Of denk ik verkeerd? :?

  • Anders
  • Registratie: December 2000
  • Laatst online: 24-08 18:29
7800 rijen per jaar is toch peanuts? Zelfs tienduizenden rijen kunnen door MySQL razendsnel worden doorgespit, zeker als je je queries goed uitdenkt en slimme indexen plaatst. Je zou er bovendien voor kunnen kiezen de gegevens een maand of 2, 3 bij te houden en daarna te wissen.

Ik spoor veilig of ik spoor niet.


Verwijderd

Topicstarter
Op vrijdag 15 maart 2002 21:01 schreef Anders het volgende:
7800 rijen per jaar is toch peanuts? Zelfs tienduizenden rijen kunnen door MySQL razendsnel worden doorgespit, zeker als je je queries goed uitdenkt en slimme indexen plaatst. Je zou er bovendien voor kunnen kiezen de gegevens een maand of 2, 3 bij te houden en daarna te wissen.
OK, fijn om te weten. Die optie om na 2/3 maanden te wissen is idd. een goede optie! Bedankt!

Maar het kan dus niet anders? Hoe doen forums dat bijvoorbeeld (ik zeg maar iets: vbulletin), hoe houden die de "geupdate" forumposten dan bij? (dus threads waar meer replies op zijn dan de vorige keer). Want daar kan je dan toch van miljoenen rijtjes spreken?

  • Anders
  • Registratie: December 2000
  • Laatst online: 24-08 18:29
Op vrijdag 15 maart 2002 21:13 schreef DiEana het volgende:
Maar het kan dus niet anders? Hoe doen forums dat bijvoorbeeld (ik zeg maar iets: vbulletin), hoe houden die de "geupdate" forumposten dan bij? (dus threads waar meer replies op zijn dan de vorige keer). Want daar kan je dan toch van miljoenen rijtjes spreken?
Volgens mij werken de meeste gewoon met een algemene "last visit". Wanneer sinds je laatste bezoek (sessie) aan een forum ergens reacties zijn bijgekomen, zie je dat weergegeven. Kwestie van if $lastmessage>$lastvisit.

Ik spoor veilig of ik spoor niet.


Verwijderd

Topicstarter
Op vrijdag 15 maart 2002 21:53 schreef Anders het volgende:

[..]

Volgens mij werken de meeste gewoon met een algemene "last visit". Wanneer sinds je laatste bezoek (sessie) aan een forum ergens reacties zijn bijgekomen, zie je dat weergegeven. Kwestie van if $lastmessage>$lastvisit.
Ja, inderdaad... maar die status "new" gaat dus weg dan, ook al heb je bijvoorbeeld 1 thread niet bezocht. En dat wil ik nu net niet, ik wil elke newspost als apart aanzien.

Verwijderd

Topicstarter
Beter dan een hele tabel vol datums en userids kan het dus niet?

(ja ik weet het, ik moet 24 uur wachten.. maar ik verwachtte toch niet dat iemand hier nog naar ging kijken?)

Verwijderd

Topicstarter
niet veel interesse zo te zien? :'(

(spijtig.. mij leek het anders een interessant onderwerp: efficiënt leren werken.)

  • Bart Coppens
  • Registratie: April 2000
  • Laatst online: 25-11-2021
Ik meen me te herinneren dat je ook arrays in cookies kon gebruiken, waardoor je zoiets kan maken:
$koekje_lastvisit[$threadID] = een timestamp. Dan kan je kijken of er meer replys zijn:
PHP:
1
<?if ($koekje_lastvisit[$threadID] < $thread_lastpost) {    Nieuwe_Posts();} else {    Geen_Nieuwe_Posts();}?>

En dan als de gebruiker uitlogt al die koekjes wissen (of na een maand de koekjes wisen)

Copyright Auteur heeft Tweakers.net BV geen exclusieve licentie op bovenstaande post verleend. Voorafgaande en uitdrukkelijke schriftelijke toestemming van Tweakers.net BV is dus niet noodzakelijk voor het vermenigvuldigen van bovenstaande post


Verwijderd

Topicstarter
Op zondag 17 maart 2002 13:46 schreef Bart Coppens het volgende:
Ik meen me te herinneren dat je ook arrays in cookies kon gebruiken, waardoor je zoiets kan maken:
$koekje_lastvisit[$threadID] = een timestamp. Dan kan je kijken of er meer replys zijn:
PHP:
1
<?if ($koekje_lastvisit[$threadID] < $thread_lastpost) {    Nieuwe_Posts();} else {    Geen_Nieuwe_Posts();}?>

En dan als de gebruiker uitlogt al die koekjes wissen (of na een maand de koekjes wisen)
Gaat die cookie dan niet heel snel volzitten? Een maand of 2 "cookietijd" zou perfect zijn inderdaad, denk ik toch.

PS: hoi mede-belg :7
Pagina: 1