webForumDet fria alternativet

Slumpa 366 poster med 20 st.

ASP

3 svar · 249 visningar · startad av ironhead

Medlem sedan mars 20011 346 inlägg
Frågan#1

Hej!
Jag har testat denna slumpfunktion som är suverän:

SET RS = oConn.Execute("SELECT id,sMov FROM ...")

Dim uboundarray, antalslump, i, j, k, slumptal
Dim GRrecept, slumparrayrec(1,6), antalrec

If NOT RS.EOF Then
	GRrecept = RS.GetRows
	uboundarray=UBound(GRrecept,2)
	antalrec=7: antalslump=0: i=0
	If uboundarray+1 > antalrec Then
		Do Until antalslump = 7
			Randomize
			slumptal=Int(Rnd*(uboundarray+1-i))
			slumparrayrec(0,antalslump) = GRrecept(0,slumptal)
			slumparrayrec(1,antalslump) = GRrecept(1,slumptal)
			
			For j = slumptal To uboundarray-1-i
				GRrecept(0,j) = GRrecept(0,j+1)
				GRrecept(1,j) = GRrecept(1,j+1)
			Next
			ReDim Preserve GRrecept(UBound(GRrecept, 1), UBound(GRrecept, 2) - 1)
			i=i+1
			antalslump = antalslump+1
		Loop
	Else
		For j = 0 to uboundarray
			slumparrayrec(0,j) = GRrecept(0,j)
			slumparrayrec(1,j) = GRrecept(1,j)
		Next
	End If
	For k=0 To UBound(slumparrayrec,2)
		response.write "<a href=rec.asp?id=" & slumparrayrec(0,k) & ">" & slumparrayrec(1,k) & "</a>&nbsp;&nbsp;"
	Next
Else
	response.write "Det finns inga recept."
End If

Det jag skulle vilja göra är att om jag endst har t.ex. 20 eller 30 poster i databasen så skulle jag vilja slumpa ut dom så att dom slumpades ut till 366 poster...är det möjligt att göra med denna array eller ska man försöka sig på nåt annat sätt?

Helst skulle jag se att samma post inte uppenbarade sig efter varandra...

Alltså:
1. Jag har 20-30 poster i databsen
2. Vill slumpa dom och inte få samma värde efter varann
3. Vill få ut 366 utskrifter av de 20 slumpade posterna

Medlem sedan apr. 20031 660 inlägg
#2

Re: Slumpa 366 poster med 20 st.

HEJ!

ironhead skrev:

Jag har testat denna slumpfunktion som är suverän

Tack, känner igen den :)

I vilket fall hade jag inte använt denna kod för detta, eftersom den är gjord för att inte få dubletter alls. Den tar bort de värde i arrayen som slumpats fram, dvs det kommer inte att gå.

Istället får du slumpa ett värde du har, sedan slumpa nästa, och kontrollera att det inte är samma som det föregående.

Om du inte accepterar post14-post22-post14 så får du utöka kontrollen så att du inte får samma värde för nära inpå varandra.

Medlem sedan mars 20011 346 inlägg
#3

:) Kom inte ihåg vem som gjort den, nu vet jag....och säger det återigen....den e super ;)

Istället får du slumpa ett värde du har, sedan slumpa nästa, och kontrollera att det inte är samma som det föregående.

Ok! Ska försöka börja med nåt....återkommer nog senare :)

Medlem sedan mars 20011 346 inlägg
#4

Löste det såhär:

for i = 1 to 366

SET RS=Conn.Execute("SELECT * FROM tblmov ORDER BY NEWID()")

 If RS(0) <> a Then
   Response.write RS(0) & "<br>"
 End If

a = RS(0)

next

Glömde säga att jag sitter med en MSSQL

273 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
145 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
145 ms — ändringar (db)