webForumDet fria alternativet

Slumpa rad ur databas?

3 svar · 209 visningar · startad av M@rtin

M@rtinMedlem sedan dec. 19992 085 inlägg
#1

Hur gör man om man vill slumpa fram en rad ut en databas? Finns säkert massor av varianter men jag vill ha ett väldigt enkelt sätt...
Jag har en ID räknare i databasen så det borde väl bara vara att hämta högsta ID-nummret o sedan slumpa ett tal mella 1 o det nummret o sedan läsa in raden där ID-nummret är lika med slumptalet. Problemet är att jag inte vet hur man slumpar i asp :(

//M@rtin

SPiNMedlem sedan mars 20007 896 inlägg
#2

Script för slumpning i ASP ser ut så här:

<%
dim slumpa
randomize
slumpa = rnd
%>

Men rnd slumpar bara ett tal mellan 0 och 1, så då kan man multipliciera det med 10 eller hundra, beroende på hur många poster du har i databasen.
Om du inte vet hur många poster det är, kan man räkna dom. Ett script skulle alltås kunna se ut så här:

<%
set conn = Server.CreateObject("ADODB.Connection")
pth = "DBQ=" & Server.MapPath("sökväg/till/databas.mdb")
conn.Open "Driver={microsoft access driver (*.mdb)}; " & pth & ";"
set mySQL = "SELECT COUNT(*) AS rekna FROM tabell"
set RS = conn.Execute(mySQL)

if RS("rekna") > 10 then
randomize
slumpa = rnd * 100
else
randomize
slumpa = rnd * 10
end if

SQL = "SELECT * FROM tabell WHERE id = '" & slumpa & "'"
set RS2 = conn.Execute(SQL)

Response.Write "Nu slumpades <b>" & RS2("namn") & "</b> med id:et " & RS2("id") & "."
%>

Då får du en ny slumpning varje gång scriptet körs. Vill du inte det så tar du bort alla randomize i koden.

------------------
SPiN, bjowik99@it-gymnasiet.nu

[Redigerat av SPiN den 14 aug 2000]

VideMedlem sedan dec. 19998 577 inlägg
#3

Enda problemet med ovanstående kod är att id:t alltid måste börja på 1 och sedan räknas uppåt utan mellanrum... Här är ett sätt jag använder på min sajt:

Set Databas = Server.CreateObject("ADODB.Connection")
MdbFilePath = Server.MapPath("/scripts/databas.mdb")
Databas.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"

SQL = "select Count(*) AS klo from lankar"
Set RS_klo = databas.execute(SQL)

Randomize
Set rstemp = Server.Createobject("ADODB.Recordset")
SQL = "Select * from lankar"
rstemp.cursorlocation = 3
rstemp.cachesize = 5
rstemp.open SQL, "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("/scripts/databas.mdb") & ";"
rstemp.move Int(Rnd*RS_klo("klo"))

Nu ligger alltså databasposten i rstemp...

------------------
PC-älskare prasslar i säven, och har malt i ryggen
www.webeye.nu
Är du med i facket?

M@rtinMedlem sedan dec. 19992 085 inlägg
#4

Okej, tack båda två.
Om det blir ett hopp i ID när man raderar en rad så måste jag nog använda Vides version.

//M@rtin

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