webForumDet fria alternativet

10 slumpvalda tal

ASP

5 svar · 305 visningar · startad av david

Medlem sedan dec. 199949 inlägg
Frågan#1

Jag vill ha ut 10 st slumpade, unika tal som motsvarar ID:n i en databas. Vill alltså få ut 10 st unika, slumpvalda, rader ur en databas i Access. Har kollat runt här i forumet, men har inte fått något att fungera.

Har alltså en DB med fälten 'ID' och 'Fraga'. Det finns totalt ca 20 poster i databasen, med ID från 1 - 20. Men Detta kan komma att ändras om någon fråga tas bort. Vill alltså slumpa ut värdet i 'Fraga' tio gånger utan att 'Fraga' upprepar sig.

Puhhhh!

Är det någon som är haj på detta och har lust att hjälpa mig lite? :birp

Medlem sedan mars 20015 287 inlägg
Medlem sedan mars 20002 836 inlägg
Medlem sedan dec. 199949 inlägg
#4

Hej igen!

Har ju försökt men inte fått något att fungera. Jag är väl lite dum i huvet eller så jobbar jag för mycket. PatrikB, du verkar ha lite koll, försökte ladda ner ditt script clsArray, men din domän verkar vara nere...

Du har inte lust att maila den till mig på david.hagg@home.se?

Tack tack!

Medlem sedan dec. 199949 inlägg
#5

Har fått det att fungera ungefär som jag vill ha det. Ett problem kvar bara: en post får bara förekomma en gång.

<%
for i = 0 to 9
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("test.mdb")

Set rsCount = Connection.Execute("SELECT Count(ID) AS intWordCount FROM tabell")
intWordCount = rsCount("intWordCount") - 1
rsCount.Close
Set rsCount = Nothing

Set rsOrd = Connection.Execute("SELECT * FROM tabell")
arrOrd = rsOrd.GetRows()
rsOrd.Close
Set rsOrd = Nothing

Randomize
intRndOrd = rnd() * intWordCount

'** ID skrivs arrOrd(0,Round(intRndOrd))
Response.Write arrOrd(1,Round(intRndOrd)) & "&nbsp;&nbsp;"
Response.Write arrOrd(2,Round(intRndOrd)) & "<br>"

Connection.Close
Set Connection = Nothing
next
%>

Någon som vet hur man kan spara att ett ID redan har visats en gång och därmed hoppa över detta ID?

Medlem sedan dec. 199949 inlägg
#6

Har äntligen fått det att fungera som jag ville, efter många timmars knackande på det numera söndernötta tangentbordet!

<%
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("databas.mdb")

Set rsCount = Connection.Execute("SELECT Count(ID) AS intWordCount FROM Fraga")
intWordCount = rsCount("intWordCount") - 1
rsCount.Close
Set rsCount = Nothing

Set rsOrd = Connection.Execute("SELECT * FROM Fraga ORDER BY ID DESC")
arrOrd = rsOrd.GetRows()
rsOrd.Close
Set rsOrd = Nothing

for i = 0 to 9
Randomize
intRndOrd = rnd() * intWordCount

if firstTime = true then
	if inStr(myArray, round(intRndOrd)) > 0 then
	
	do until inStr(myArray, round(intRndOrd)) = 0
		Randomize
		intRndOrd = rnd() * intWordCount
	loop
	myArray = myArray & "," & round(intRndOrd)
		
	else
	myArray = myArray & "," & round(intRndOrd)
	end if
else
	myArray = round(intRndOrd)
	firstTime = true
end if

next

myArray = split(myArray, ",")

cntID = 1
for i = 0 to 9

Response.Write cntID & "&nbsp;"
Response.Write arrOrd(3,myArray(i)) & "&nbsp;&nbsp;"
Response.Write arrOrd(4,myArray(i)) & "&nbsp;&nbsp;"
Response.Write arrOrd(5,myArray(i)) & "&nbsp;&nbsp;"
Response.Write arrOrd(6,myArray(i)) & "&nbsp;&nbsp;"
Response.Write arrOrd(7,myArray(i)) & "<br>"

cntID = cntID + 1
next

Connection.Close
Set Connection = Nothing
%>

Kanske inte är världens mest effektiva sätt att göra det på, men det fungerar och det är ju kul för mig!

255 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)