webForumDet fria alternativet

Random-funktion i SQL med Access-databas

6 svar · 432 visningar · startad av lilja

liljaMedlem sedan juli 20041 183 inlägg
#1

Hej!

Jag vill slumpa fram ett reckordset ur en tabell på något sätt och fick reda på att man skulle kunna göra såhär om man hade en Access-databas:

SQL = "SELECT * FROM Tabell ORDER BY RND(kolumn)"

Första dagen fungerade det utmärkt men nuförtiden får jag nästan alltid bara fram samma post. Jag har ca 110 poster men får den slumpar alltid fram 8:e?? Jag fattar inget?

Jag orövade också med att skriva såhär:

Randomize
SQL = "SELECT * FROM Tabell ORDER BY RND(kolumn)"

Känner dock på mig att den borde stå i SQL-sattsen på något sätt ;)

Någon snäll som vet hur jag kan lösa mitt problem?

LaspMedlem sedan juli 200012 980 inlägg
#2

Utan att ge mig in på den precisa lösning borde du ju veta hur många poster du skall ta random på. Sedan har random ofta ett fix startvärde. Det kan man ändra på med hjälp av Seed, frö.
Kolla hur du sätter detta.

liljaMedlem sedan juli 20041 183 inlägg
#3

Jag ändrade Randomize till Randomize() och jag tror det fungerar nu...

Jag är dock inte säker efterssom jag sett koder på andra sidor som är mycket krångligare...

<%
' Initialize ASP RND() function
Randomize()
intRandomNumber = Int (1000*Rnd)+1

' Return 3 random records
strSQL = _
   "SELECT TOP 3 TableID, Field1, Rnd(" & -1 * (intRandomNumber) & "*TableID)" & _
   "FROM Table1 " & _
   "ORDER BY 3"

Set objRS = objConn.Execute(strSQL)
%>

Den koden kan man ju ta som exempel. Om jag borde ändra till detta så SKRIK för annars gör jkag inte det, jag tror nämligen att min kod fungerar?? :P

@ndersMedlem sedan juni 200032 969 inlägg
#4

lilja skrev:

Jag ändrade Randomize till Randomize() och jag tror det fungerar nu...

Det borde inte göra någon som helst skillnad. Du kör ju randomize i din ASP-kod, men slumpningen gör du ju i SQL.

Access är lite klurigt med slumpning, och jag hade gjort ungefär som i ditt senaste inlägg.

liljaMedlem sedan juli 20041 183 inlägg
#5

Det visade sig att efter ett visst antal slumpningar (eller nåt) så cachades slumpningen och samma slumpvärde kom fram... Jag körde dock den senare koden

<%
' Initialize ASP RND() function
Randomize()
intRandomNumber = Int (1000*Rnd)+1

' Return 3 random records
strSQL = _
   "SELECT TOP 3 TableID, Field1, Rnd(" & -1 * (intRandomNumber) & "*TableID)" & _
   "FROM Table1 " & _
   "ORDER BY 3"

Set objRS = objConn.Execute(strSQL)
%>

och hittils fungerar dete prima :)

Mattias NordinMedlem sedan dec. 20051 056 inlägg
#6

Tackar för din lösning Lilja. Bra rubrik på tråden hade du också...

Sökte, fann, och dyrkar nu även Lilja ;)

liljaMedlem sedan juli 20041 183 inlägg
#7

haha tackar, oj va länge sedan det där var :P

129 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)