28. marts 2003 - 11:54Der er
16 kommentarer og 3 løsninger
Random udtræk fra database ?!?
Hejsa
Jeg har været ved at lede efter oplysninger om hvorledes man kan lave et random udtræk fra databasen således at der vises f.eks. forskellige produkter på en forside for hver gang men besøger siden. Er der en her der kan komme med nogle ideer til hvordan jeg kan gøre dette ?
Alle de ovenstående tilfældig-række-funktioner, som I foreslår har faktisk nogle heftige performance-problemer. Hvis det skal køre rigtig hurtigt, er det vigtigt at undgå at læse mere end den ene, tilfældige række, som man skal bruge (eller så få som muligt).
Ok så langt så godt det virker fint :o) Men hvis jeg så vil lave det således at jeg har en tabel med 2 rækker og 2 kolonner hvor tekst og billed vises modsat på 2 random udtræk er der så oxo en lille finte man kan lave der ?
ok jeg prøver igen hvergang siden loades skal der random hentes 2 udtræk fra databasen og de to udtræk skal så ligge forskudt i tabellen som vist oven for.
set rs = conn.execute ("SELECT TOP 1 * FROM mintabel WHERE " & rselect & "= ((" & rseed & " * (" & sample & " + 17)) mod (" & sample & " - 3)")
Den benytter SQL til at vælge en tilfældig række. Desværre vil flere rækker opfylde kriteriet, hvorefter at man får databasen til at smide alle pånær den første væk. rsize skal sættes til et tal som svarer nogenlunde til antallet af rækker i databasen (det må dog gerne afvige en del - performance falder blot i takt med at tallet afviger).
De løsninger hvor man henter alle id'er er rigtigt dårlige, da systemet vil få elendig performance når der er mange rækker. Den næst-værste løsning (som kan blive det, man bliver nødt til at gøre) er at bruge min løsning ovenfor, hvor size sættes til det reelle antal rækker i tabellen via en forespørgsel. Det burde køre væsentligt hurtigere.
Iøvrigt har jeg ikke testet koden ovenfor. Der skal nok tweakes lidt på parametrene. Det er vigtigt at de to tal ((rseed * ( sample + 17)) og sample - 3 i flest mulige tilfælde har 1 som største fælles divisor. Ellers bliver udvælgelsen ikke så tilfældig. Derfor de to tal 17 og 3.
Et lille p.s.: hvis man er rigtigt uheldig, vil min kode ikke resultere nogen rækker overhovedet, men det burde ske meget sjælent. I så fald kan man bare køre den igen.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.