[PHP] Big Randomizer

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Okay, ik heb een MySQL database (288 rijen op dit moment, en per dag groeiend)

Al deze 288 rijen moet ik totaal RANDOM per 10 op een pagina laten zien.
Echter mag een rij geen 2 keer voorkomen.

Dus op pagina 1 moetten 10 random rijen komen, pagina 2 10 andere random, pagina 3 weer 10 andere enz. net zolang tot alle rijen een keer in beeld zijn geweest.

Om elk van deze 288 te randomizen, en tegen elkaar te checken, lijkt me een VEEL te processor / tijd belastende procedure. (vooral de laatste waardes, moet hij vaak opnieuw randomizen, omdat ze al een keer geweest zijn)

Wat kan ik doen om dit wat simpeler / sneller te maken?

Acties:
  • 0 Henk 'm!

  • dominic
  • Registratie: Juli 2000
  • Laatst online: 14-09 14:42

dominic

will code for food

Volgens mij zijn er genoeg php functies te vinden op internet die een random getal opleveren, meestal geef je bij die functie ook een range op..

Je kunt in een kleine array natuurlijk bijhouden welke getallen er zijn uitgegeven, traag is dit echt niet..

Download my music on SoundCloud


Acties:
  • 0 Henk 'm!

  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 01-04-2023
optie 1: array met id's vullen, random kiezen en eruit pleuren
optie 2: random order by via mysql? (weet ik niet zeker of dat kan)

Ook Knor is aangestoken met het ligfietsvirus!


Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 13:04
De minst belastende manier om dit te doen is eerst een array aanmaken met alle ID's, die met de functie shuffle random sorteren, die array opslaan in een formfield of een sessie, en daaruit de eerste, tweede of x-de tien elementen te halen.

Een alternatief zou zijn een SELECT * FROM table ORDER BY RAND(), die alle rijen in een random volgorde teruggeeft; deze resultaten zou je dan moeten opslaan in een session-var, maar dit neemt een stuk meer resources in. Voordeel is wel dat je maar 1 DB-query hoeft uit te voeren.

Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

mogelijkheid:
• in SQL random 10 rows halen (order by rand() limit 10)
• de id's van de rows opslaan in een sessie
• volgende pagina: SELECT * FROM dingen WHERE ding_id NOT IN ($sessie_id_lijst) ORDER BY rand() LIMIT 10
• zie punt 2

succes :)

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
sjroorda schreef op 28 March 2003 @ 10:39:
De minst belastende manier om dit te doen is eerst een array aanmaken met alle ID's, die met de functie shuffle random sorteren, die array opslaan in een formfield of een sessie, en daaruit de eerste, tweede of x-de tien elementen te halen.
Dit was nou precies wat ik zocht :)

Thanks a boel!

Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

afhankelijk van hoe intensief de functionaliteit wordt gebruikt, kun je een manier kiezen. De oplossing van sjroorda is de snelste wanneer je zeker weet dat alle pagina's achterelkaar worden bezocht. De grootste database-load is bij de eerste 'view' (daar moeten alle rijen opgehaald worden en in een sessie worden gezet)

De oplossing die ik je gaf is bij alle pagina's ongeveer even snel (de sessie groeit na elke pagina).

[ Voor 5% gewijzigd door thomaske op 28-03-2003 13:46 ]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."

Pagina: 1