Jyske Bank er rykket ind i Glaskuben på Kalvebod Brygge, et markant byggeri i hjertet af København. Knap 1.000 arbejder her, heraf 200 i IT, med nye rammer for samarbejde, innovation og udvikling.
Der er reelt set ikke noget der hedder tre tilfældige rækker i en database. Ideen i en relationel database er man man entydigt kan identificere en given række.
Hvis du har en tal-kolonne med unikke værdier - fx id - så kan du bruge en random funktionen til at vælge nogle rækker ud.
Funktionen hedder RAND() - den fungerer ligesom C's random funktion. Du kan angive et random seed i parentesen hvis du ser fordel i det (fx fra GetDate() milisekund-værdi)
Måske noget i denne stil
select * from mytable where id between 1 and floor(rand()*1000) order by id desc
Bemærk at højeste række der kan vælges i ovenstående er 1000 - og de tre rækker der vælges er blot de tre med højste id værdier.
En anden mulighed er, at du laver tre eller flere udtræk med id = rand() og samler dem med en UNION a la
select top 3 * from ( select * from mytable where id = floor(rand()*1999) union select * from mytable where id = floor(rand()*1999) union select * from mytable where id = floor(rand()*1999) union select * from mytable where id = floor(rand()*1999) union select * from mytable where id = floor(rand()*1999) ) as x
grunden til at jeg trækker flere end 3 rækker ud er, at RAND() nemt kan levere en værdi der ikke indgår i din nøglerække...
Hvis man rand() i en select bliver den kun udført en gang og dermed vil alle rows få samme tilfældige værdi. Et lille trick kunne være at bruge newis() som giver en ny guid: select top 3 * from mytable order by newid()
cbp: Tak for tippet. Har også lige forsøgt mig med dit eksempel. Det virker også perfekt og enkelt at implementere!
Synes godt om
Ny brugerNybegynder
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.