Avatar billede inkognito1 Nybegynder
13. maj 2002 - 09:50 Der er 3 kommentarer og
4 løsninger

Random ... 6 forskellige.

Hej Eksperten :)

Jeg har lavet en random ting på min side.
<%
Set myConn = Server.CreateObject("ADODB.Connection")
myConnStr = ""
myConn.Open (myConnStr)
Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "SELECT * FROM nyhed"
rs.Open strSQL, myConn, 3, 1
rndMax = CInt(rs.RecordCount)
if rndMax > 0 then
  Randomize
  rndNumber = Int((RND * rndMax))
  rs.Move rndNumber 'Flyt til den valgte record

link2 = rs("link")
billedelink = rs("billedeurl")
%>

Den er indsat 6 gange på siden. Det sker desværre ret tit den viser det samme.

Kan jeg på en måde gøre sådan den ikke vælger den samme.

Noget med

if billedelink2 = billedelink1 then next record

En der kan hjælpe ...
Avatar billede tjacob Juniormester
13. maj 2002 - 09:56 #1
Prøv at fjerne Randomize i de 5 sidste. Det vil ikke garantere nye, men det vil give større spredning.
Avatar billede dk_akj Nybegynder
13. maj 2002 - 10:00 #2
Hvad med at lave et
do ......
her tager du de 6 tilfældige og sørger for at der ikke er 2 ens

..........
loop until "der er valgt 6"

Hvad angår at checke om der er 2 ens kan du placere dine "tilfældige" i et array og så checke deri om din "nye tilfældige" allerede findes i dit array

akj
Avatar billede tjacob Juniormester
13. maj 2002 - 10:41 #3
akj's forslag implementeres således:

    Dim a
    Dim b
    Dim c
    Dim Arr(1 To 6)
    If rndMax > 5 Then 'Du kan kun få forskellige hvis der er mindst 6
        Randomize
        Arr(1) = Int(Rnd * rndMax)
        For a = 2 To 6
            Do
                c = False
                Arr(a) = Int(Rnd * rndMax)
                For b = 1 To a - 1
                    If Arr(b) = Arr(a) Then c = True
                Next
            Loop Until c = False
        Next
        for a = 1 to 6
        rs.Move Arr(a) 'Flyt til den valgte record
            link(a) = rs("link")
            billedlink(a) = rs("billedurl")
        Next
    End If

Bemærk at jeg også har skrevet dine "link" og "billedlink" variabler som arrays (i den sidste for-next). Du skal huske først at erklære dem som sådan. Hvis ikke skal du bare skrive de 3 linier i løkken 6 gange.

/tjacob
Avatar billede tjacob Juniormester
13. maj 2002 - 10:44 #4
En lille ændring: Indsæt linien "Exit For" efter linien: If Arr(b) = Arr(a) Then c = True
Avatar billede tjacob Juniormester
13. maj 2002 - 10:47 #5
-Jeg kokser da helt i dag:

Do - loopet skal se sådan ud:

Do
                c = False
                Arr(a) = Int(Rnd * rndMax)
                For b = 1 To a - 1
                    If Arr(b) = Arr(a) Then
                        c = True
                        Exit For
                    End if
                Next
            Loop Until c = False

/tjacob ;-)
Avatar billede aceofspair Nybegynder
13. maj 2002 - 15:49 #6
Du har glemt Randomize...

Det er noget jeg selv er blevet RET irriteret over et par gange eller 20
prøv med:
--Kode
<%
randomize timer
Set myConn = Server.CreateObject("ADODB.Connection")
myConnStr = ""
myConn.Open (myConnStr)
Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "SELECT * FROM nyhed"
rs.Open strSQL, myConn, 3, 1
rndMax = CInt(rs.RecordCount)
if rndMax > 0 then
  Randomize
  rndNumber = Int((RND * rndMax))
  rs.Move rndNumber 'Flyt til den valgte record

link2 = rs("link")
billedelink = rs("billedeurl")
%>
--Kode

Jeg tror at det virker
Avatar billede eagleeye Praktikant
13. maj 2002 - 16:35 #7
Jeg har lavet dette script som finder X antal tilfældige record og udskriver dem, du kan rette antalRandom til 6 eller få inspiration til dit eget script.:


antalRandom = 15
Rs.Open "SELECT * FROM abbtabel", myConn,1,3
inDB = rs.RecordCount
If inDB > antalRandom then
  Randomize timer
  newId = Int (rnd*inDB)
  strIndex = "," & newid & ","
  indexFound = 1
  Do while indexFound < antalRandom
    Do
      Newid = Int (rnd*inDB)
    Loop while inStr(strIndex,"," & newid & ",") > 0
    strIndex = strIndex & newid & ","
    indexFound = indexFound + 1
  Loop
  strIndex = mid (strIndex,2,len(strIndex)-2)
  myArr=split(strIndex,",",-1)
  For i = Lbound(myArr) to Ubound(myArr)
    rs.move myArr(i),1
     
    Response.write rs("kolonnenavn") & "<br>"

  next
end if
Rs.Close
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester