Avatar billede elkrog Nybegynder
31. oktober 2001 - 17:07 Der er 5 kommentarer og
2 løsninger

3 random udtræk - Ikke ens

Hej Eksperter

Hvordan trækker jeg 3 random links ud fra min database,
udtrækkene må IKKE være ens.

Jeg har kigget lidt rundt på eksperten, men
har ikke fundet noget der dur.

Avatar billede carpediem Nybegynder
31. oktober 2001 - 17:17 #1
Hvilken database benytter du?
Avatar billede elkrog Nybegynder
31. oktober 2001 - 17:18 #2
access
Avatar billede eagleeye Praktikant
31. oktober 2001 - 17:46 #3

\' Skaber DSNLess forbindelse til DBen
strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\"abb.mdb\")
Set myConn = Server.CreateObject(\"ADODB.Connection\")
Set rs = Server.CreateObject(\"ADODB.RecordSet\")
myConn.Open strDSN
\' Skaber et recordset udfra SQL strengen

Rs.Open \"SELECT * FROM abbtabel\", myConn,1,3
inDB = rs.RecordCount
If inDB > 3 then
  Randomize timer
  newId = Int (rnd*inDB)
  strIndex = \",\" & newid & \",\"
  indexFound = 1
  Do while indexFound <3
    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 \"DATA FRA DIT RECORD SET\"

  next
end if
Rs.Close
Avatar billede carpediem Nybegynder
31. oktober 2001 - 17:46 #4
Så har jeg ikke lige nogen nem løsning, da rnd ikke virker efter hensigten, når man henter via ASP.

Men jeg har en lidt længere løsning:

Set objConn = Server.CreateObject(\"ADODB.Connection\")
strConnPath = \"DBQ=\" & Server.MapPath (\"Database.mdb\")
objConn.Open \"Driver={Microsoft Access Driver (*.mdb)};\" & strConnPath
Set rs = Server.CreateObject (\"ADODB.Recordset\")
Sql = \"Select count(*) as Found from Tabel\"
rs.Open Sql,objConn,3,3
If rs.RecordCount > 0 Then
  Ialt = rs(\"Found\")
  rs.Close
  Sql = \"Select * from Tabel\"
  rs.Open Sql,objConn,3,3
  Randomize
  RandNum = Int(Rnd * Ialt) + 1
  rs.MoveFirst
  For i = 1 to RandNum - 1
    rs.MoveNext
  next
  strlinkID1 = rs(\"ID\")
  strLink1 = rs(\"Link\")
  rs.Close
End if
If strBanner1 <> \"\" Then
  Sql = \"Select count(*) as Found from Tabel WHERE ID <> \" & strLinkID1
  rs.Open Sql,objConn,3,3
  If rs.RecordCount > 0 Then
    Ialt = rs(\"Found\")
    rs.Close
    Sql = \"Select * from Tabel WHERE ID <> \" & strLinkID1
    rs.Open Sql,objConn,3,3
    Randomize
    RandNum = Int(Rnd * Ialt) + 1
    rs.MoveFirst
    For i = 1 to RandNum - 1
      rs.MoveNext
    next
    strLinkID2 = rs(\"ID\")
    strLink2 = rs(\"Link\")
    rs.Close
  End If
End If
If strLinkID2 <> \"\" Then
  Sql = \"Select count(*) as Found from Tabel WHERE ID <> \" & strLinkID1 & \" AND ID <> \" & strLinkID2
  rs.Open Sql,objConn,3,3
  If rs.RecordCount > 0 Then
    Ialt = rs(\"Found\")
    rs.Close
    Sql = \"Select * from Tabel WHERE ID <> \" & strLinkID1 & \" AND ID <> \" & strLinkID2
    rs.Open Sql,objConn,3,3
    Randomize
    RandNum = Int(Rnd * Ialt) + 1
    rs.MoveFirst
    For i = 1 to RandNum - 1
      rs.MoveNext
    next
    strLinkID3 = rs(\"ID\")
    strLink3 = rs(\"Link\")
    rs.Close
  End If
End If
Avatar billede carpediem Nybegynder
31. oktober 2001 - 17:48 #5
eagleeye>> Hvad sker der med din, hvis der nu ikke er tre i databasen?
Avatar billede elkrog Nybegynder
31. oktober 2001 - 18:08 #6
Tak for hjælpen begge to :D
Avatar billede eagleeye Praktikant
31. oktober 2001 - 18:39 #7
Der er sker ikke noget, men man kan jo let tilføje en else..
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