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 :(
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.
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"))