webForumDet fria alternativet

slumpa ur en databas

ASPur ASP

12 svar · 747 visningar · startad av muffika

Medlem sedan feb. 200212 inlägg
Frågan#1

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!

------------------
:: muffika ::
http://www.muffika.tk

Medlem sedan dec. 200012 464 inlägg
#2

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

------------------
essentitia preter non sans multiplicandum

Medlem sedan mars 2000187 inlägg
#3

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

Medlem sedan juli 2000619 inlägg
#4

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...

Medlem sedan mars 2000187 inlägg
#5

tack!

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

Medlem sedan jan. 2001361 inlägg
#6

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

Medlem sedan jan. 2001361 inlägg
#7

Ingen som vet?

Medlem sedan jan. 2001361 inlägg
#8

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
Medlem sedan nov. 2003196 inlägg
#9

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
			%>
Medlem sedan apr. 20031 660 inlägg
#10

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?

Medlem sedan nov. 2003196 inlägg
#11

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...

Medlem sedan apr. 20031 660 inlägg
#12

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)
%>
Medlem sedan nov. 2003196 inlägg
#13

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

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