---
title: "slumpa ur en databas"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/14272-slumpa-ur-en-databas"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "muffika"
published: "2002-02-07T19:19:00.000Z"
updated: "2004-03-10T12:20:08.000Z"
replies: 12
views: 781
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/14272-slumpa-ur-en-databas"
---

# slumpa ur en databas

## #1 — muffika, 2002-02-07T19:19Z

Hej, jag undrar om det finns någon som vet hur jag kan "slumpa" fram tex 5 st. rader ur en databas. jag håller på med att göra ett "banner script". Jag vet inte hur jag ska göra då ID nummret på räknaren börjar på 46 och jag vill inte att samma banner ska komma upp 2 ggr samtidigt! 

Snälla hjälp mig någon!

Permalänk: https://www.webforum.nu/p/14272

## #2 — LarsG, 2002-02-07T19:28Z

Du kan ju titta på denna kod, som jag skrev åt brw.

```
<%
Dim maxNumber,strSQL,connection,rs,cnt,rndNumber,i,found
set connection = server.createobject("adodb.connection")
connection.open "dsn"
maxnumber = 5
strSQL = "SELECT namn,width FROM banner "
set rs = connection.execute(strSQL)
if not rs.eof then
arr = rs.getrows()
items = ubound(arr,2) + 1
if items < maxNumber then maxNumber = items
dim choosen()
redim choosen(maxnumber-1)
randomize
cnt = 0
Do Until cnt = maxnumber
RndNumber = Int(Rnd * items)
found = false
for i = 0 to cnt - 1
if choosen(i) = rndNumber then
found = true
exit for
end if
next
if not found then
choosen(cnt) = rndNumber 
cnt = cnt + 1
response.write arr(0,rndNumber) & "<br>" & arr(1,rndNumber) & "<br>"
end if
loop
else
response.write "?"
end if

rs.Close
Set Rs = Nothing
connection.close
set connection = nothing
%>
```

Du får väl ändra öppningen av databasen och sql-satsen så att det stämmmer med dina tabeller

Permalänk: https://www.webforum.nu/p/309750

## #3 — Percy, 2002-09-27T10:57Z

om jag vill hämta ut värden från fält i tabellen, kan jag då göra det genom att som vanligt skriva " & rs("fält") & " eller kräver det någon annan kod?
ex. jag vill utöver id:t hämta pris, namn, bildlänk

tack på förhand

Permalänk: https://www.webforum.nu/p/801250

## #4 — brw, 2002-09-27T12:30Z

Inga problem.. bara att ändra följande rad: 
strSQL = "SELECT namn,width FROM banner "

så att den plockar ut den information som du behöver..

sen är det bara att köra 

response.write arr(0,rndNumber)  

sen ökar du siffran 0 med till 1, 2, 3 osv..

alltså:
namn = 0
width = 1
height = 2
strSQL = "SELECT namn,width, height FROM banner "

du använder inte RS...

Permalänk: https://www.webforum.nu/p/801350

## #5 — Percy, 2002-09-27T13:26Z

tack!

provade med det tidigare, och mkt riktigt funkar det så klockrent, kul!

Permalänk: https://www.webforum.nu/p/801389

## #6 — jimpa, 2004-03-03T19:28Z

Hej,
Jag har ett fält i databasen som heter "weight" och som innehåller talet 1 - 10 ju högre talet är ju oftare vill jag att bannern ska visas. Är det någon som vet hur man kan implementera detta i koden ovan?

Mvh Jimpa

Permalänk: https://www.webforum.nu/p/1289100

## #7 — jimpa, 2004-03-04T15:18Z

Ingen som vet?

Permalänk: https://www.webforum.nu/p/1289513

## #8 — jimpa, 2004-03-04T21:50Z

Om det skulle vara någon som är intresserad så har jag löst det så här:

```
...
Dim arr : arr = objRS.getrows()
objRS.Close : Set objRS = Nothing

Items = ubound(arr,2) + 1
If Items < maxBanner then maxBanner = Items

    Dim sumWeight : sumWeight = 0
	 for i = 0 to ubound(arr,2)
	  sumWeight = sumWeight + arr(6,i)
	next

cnt = 0
Dim strUsed, arrUsed
strUsed = ","

Do Until cnt = maxBanner

	Randomize
	 Dim nWeight
      nWeight = Int((sumWeight * Rnd) + 1)
    
    Dim nValue : nValue = 0
     for i = 0 to ubound(arr,2)
       if nValue + arr(6,i) >= nWeight then exit for
     nValue = nValue + arr(6,i)
    Next
    
Dim bUsed : bUsed = "False"
 Dim u
  arrUsed = Split(strUsed,",")
	For u = 0 To ubound(arrUsed)
		if arrUsed(u) = Cstr(arr(0,i)) then
		 bUsed = "True"
		  exit For
		 End if
		Next
    
    IF bUsed = "False" Then
    	
    	 strUsed = strUsed & arr(0,i) & ","
    
Response.Write "Visa bannern"
cnt = cnt + 1
End IF
Loop
```

Permalänk: https://www.webforum.nu/p/1292698

## #9 — SONICdust, 2004-03-09T13:06Z

hittade en gamal tråd om att slumpa ut värden...

Ska slumpa ut en post från tabel  i Access. Vill att tre fält ska visas, det funkar bra på dom två första, bilden och rubriken funkar, men inte själva texten den blir alltid den fösta postens text. 

vad kan var fel?

```
<%			
			'objConnect.open "dsn"
			maxnumber = 2
			
			SQL = "SELECT fldBild, fldRubrik, fldText FROM tblSlumpBild;"
			objConnect.Open(ConnString)
			objRS.Open(SQL), ConnString
			
			If Not objRS.Eof Then
				arr = objRS.getrows()
				items = Ubound(arr,2) + 1
				If items < maxNumber Then maxNumber = items
					Dim choosen()
					ReDim choosen(maxnumber-1)
					Randomize
					cnt = 0
					Do Until cnt = maxnumber
						RndNumber = Int(Rnd * items)
						found = False
						For i = 0 to cnt - 1
						If choosen(i) = rndNumber Then
							found = True
						Exit For
						End If
					Next
					If Not found Then
						choosen(cnt) = rndNumber 
						cnt = cnt + 1
						Response.Write "<img src=""bilderDjurDefault/" & arr(0,rndNumber) & """ alt="" "" width=""400"" height=""200"" border=""0"" class=""ContentDjurTop""><h1>" & arr(1,rndNumber) & "</h1><h3>" & arr(2,rnNumber) & "</h3>"
					End If
					Loop
					Else
						Response.Write ""
				End If
			
			objRS.Close
			%>
```

Permalänk: https://www.webforum.nu/p/1294640

## #10 — J.N., 2004-03-09T13:36Z

HEJ!

Har du ett skrivfel eller?

```
...<h1>" & arr(1,rndNumber) & "</h1><h3>" & arr(2,rnNumber) & "</h3>"

bör väl vara

...<h1>" & arr(1,rndNumber) & "</h1><h3>" & arr(2,rn[B]d[/B]Number) & "</h3>"
```

OM det inte är skrivfel är det konstigt, hur får du in värde där?
Fast, rnNumber är ju 0 då, kom jag på :)

Har du ingen Option Explicit?

Permalänk: https://www.webforum.nu/p/1294653

## #11 — SONICdust, 2004-03-09T16:34Z

Jo det var ett stavfel, tack J.N. för hjälpen att du fan det!

Ingen Option Explicit är med, är inte haj på hur detta med fram slupning fungerar, är första gången jag testar det. Då lär mig gärna mer om hur det fungerar...

Permalänk: https://www.webforum.nu/p/1294768

## #12 — J.N., 2004-03-10T08:45Z

HEJ!

Option Explicit har inte med slumpning att göra, det handlar om dimensionering och kontroll av vilka variabler man använder.

Testa detta:

```
<%
Option Explicit
Dim a
a = 3

response.write a
%>
```

Om du sätter en fnutt framför Dim a, får du fel: "Variable is undefined: 'a'"
I ditt fall borde du fått "Variable is undefined: 'rnNumber'"

I din nuvarande kod måste du endast dimensionera arrayer, men i fortsättningen kommer alla variabler att behöva deklareras. Din bonus är att man slipper irriterande slarvfel. 

Det finns en skillnad hur man dim:ar arryer, men det lär man sig snabbt:

```
<%
Option Explicit
Dim a(2) 'siffra

a(1)=34
a(0)=44

response.write a(1)
%>
resp
<%
Option Explicit
Dim a 'ingen siffra
a = array(34,6,74)

response.write a(2)
%>
```

Permalänk: https://www.webforum.nu/p/1295091

## #13 — SONICdust, 2004-03-10T12:20Z

ok, får allt ta och lära mig det. tackför tipset

Permalänk: https://www.webforum.nu/p/1295201

---

Tråden på webben: https://www.webforum.nu/amne/asp/14272-slumpa-ur-en-databas
