Avatar billede jacand Nybegynder
22. november 2004 - 14:45 Der er 3 kommentarer og
2 løsninger

Random udtræk fra database

er der en der kan fortælle mig om der er den store forskel på disse 2 random udtræk fra en SQL database, altså om den ene er bedre end den anden til at vælge en tilfældig.
Jeg kan menlig ikke kun se at nummer 2 er væsentlig hurtiger end nr 1

-1-
Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "SELECT * FROM tabel"
rs.Open strSQL, strDSN, 3, 1
rndMax = rs.RecordCount
Randomize
rndNumber = Int((RND * rndMax))  'Find et random nummer
rs.Move rndNumber 'Flyt til den valgte record

-2-
Set rs = Server.CreateObject("ADODB.RecordSet")
Sql = "SELECT * FROM tabel ORDER BY NewID()"
rs.Open SQL, strDSN, 1, 3
Avatar billede ellebaek Nybegynder
22. november 2004 - 15:00 #1
Det er nu mest et skud da jeg ikke rigtig har forstand på det der med random udtræk..

Men vil umiddelbart sige at nr. 2 klart er bedst..
Det vil jeg mene da du så kan nøjes med at trække en record ud og så er det en tilfældig hver gang. hvorimod hvis du benytter 1 så henter du alle data ud, og derefter flytter til den valgte record i stedet...

Vil mene det er at belaste serveren unødigt..
Hvis du kun skal bruge 1 record kan du skrive LIMIT 1 i slutningen af din sql hvis det er en sql database..

Er det derimod access skal du bruge select top 1
Avatar billede ldanielsen Nybegynder
22. november 2004 - 15:02 #2
Der er en KÆMPE fordel ved den sidste metode.

Med første motode SELECT'er du alt i tabellen, og beder ovenikøbet om at få en recordcount. Det er en tung omgang, især når du laver din rs.Move. Det er provideren der skal gøre arbejdet, og det er meget tungere for webserveren.

Den sidste metode overlader arbejdet 100% til SQL-serveren. Du skal bare lige huske top 1:


Set rs = Server.CreateObject("ADODB.RecordSet")
Sql = "SELECT TOP 1 * FROM tabel ORDER BY NewID()"
rs.Open SQL, strDSN, 0, 1

Jeg går udfra at du kun skal bruge én "vinder".

Og så bruger jeg , 0, 1

Det er fordi at jeg regner med at du ikke skal opdatere data i tabellen, men kun læse data. Hvis du også kan undvære .RecordCount og et par andre "dyre" metoder, så kan du nøjes med , 0, 1

Uden jeg behøver gå i detaljer er det væsentlig lettere for båder web- og sql-server at levere

Og ja, det er lige tilfældigt
Avatar billede ldanielsen Nybegynder
22. november 2004 - 15:03 #3
LIMIT 1 er mySql, du skal bruge TOP 1 i MS-SQL
Avatar billede jacand Nybegynder
23. november 2004 - 20:34 #4
ldanielsen> laver du lige en svar :-)
Avatar billede ldanielsen Nybegynder
24. november 2004 - 14:38 #5
Svar
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester