Avatar billede oasen Nybegynder
24. januar 2003 - 00:10 Der er 17 kommentarer og
1 løsning

Random record

Jeg kan ikke få dette til at fungere. Jeg får den samme record returneret hele tiden.

Randomize
Select Felt From Tabel Order By Rnd(Felt)


Derfor prøvede jeg følgende i stedet, men jeg bryder mig ikke om, at skulle hive samtlige records ud, når jeg kun skal bruge én.

rs.Open "Select * From Tabel", Conn, 1, 3

Do While Not Fundet
    rs.MoveFirst
    Randomize
    rs.Move(int(rs.RecordCount * rnd))
    If Not rs.EOF And Not rs.BOF Then
        Fundet = True
    End If
Loop


Der er mange records, der slettes, hvorfor der er mange "huller", der gør løkken lang.
Så er der dog ikke en mere optimal måde at gøre det på?
Avatar billede medions Nybegynder
24. januar 2003 - 00:12 #1
Bruger du MySQL eller Access?

//>Rune
Avatar billede medions Nybegynder
24. januar 2003 - 00:14 #2
Hvis det er MySQL, så skal du ikke ha' Rnd(feltnavn) med!
Så skal du kun bruge:
SELECT * FROM tblTabelnavn ORDER BY Rand()

//>Rune
Avatar billede oasen Nybegynder
24. januar 2003 - 00:15 #3
Det er bare Access desværre...
Avatar billede medions Nybegynder
24. januar 2003 - 00:16 #4
Så gør du bare sådan her:

strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("abb.mdb")
Set Conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.RecordSet")
Conn.Open strDSN

antalRandom = 3
Rs.Open "select * from produkter", Conn,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
     
    'UDSKRIV FRA DATABASEN HER
    Response.write  rs("ID") & "<br>"

  next
end if
Rs.Close

//>Rune
Avatar billede oasen Nybegynder
24. januar 2003 - 00:18 #5
Ok, men giver det ikke samme resultat som mit eget eksempel? Der hiver du jo også alt i tabellen ud. Eller er der noget, jeg har overset?
Jeg er bare bange for at sløve Access alt for meget...
Avatar billede medions Nybegynder
24. januar 2003 - 00:18 #6
Avatar billede medions Nybegynder
24. januar 2003 - 00:20 #7
Avatar billede hossein Nybegynder
24. januar 2003 - 00:23 #8
Avatar billede oasen Nybegynder
24. januar 2003 - 00:25 #9
Eksemplet med dagens ID fra ADeveloper, kan jeg desværre ikke bruge, da der skal findes en tilfældig record for hver gang siden opdateres. Det er i forbindelse med en billede-afstemning.

Eagleeyes metode gør vel i bund og grund det samme som det ovenstående.
Altså trækker alt data ud. Er det ikke for krævende, mener du, hvis der er mange poster i tabellen?
Avatar billede medions Nybegynder
24. januar 2003 - 00:27 #10
oasen> Nej, det ville være det samme som at skrive:

SELECT * FROM tblTabelnavn WHERE ID = 1234452

//>Rune
Avatar billede oasen Nybegynder
24. januar 2003 - 00:27 #11
Tak, hossein - men igen... Så vidt jeg kan se, er også det bare en omskrivning af mit eget eksempel.
Avatar billede oasen Nybegynder
24. januar 2003 - 00:28 #12
Med den where-clause trækker jeg vel heller ikke alle id'er ud?!
Avatar billede oasen Nybegynder
24. januar 2003 - 00:33 #13
Jeg mener bare; Vi kan da ikke komme uden om, at der er forskel på:

1) Select ID From Tabel
2) Select ID From Tabel Where ID = 45

Men der er måske ikke den store forskel?
Avatar billede hossein Nybegynder
24. januar 2003 - 00:33 #14
selv tak!
Avatar billede oasen Nybegynder
24. januar 2003 - 00:38 #15
Alternativt kunne man jo også gøre sådan:

Do While Not Fundet
  Randomize
  Tal = int(MaxID * rnd)
  Set rs = Conn.Execute("Select From Tabel Where ID = " & Tal)
  If Not rs.EOF Then
      Fundet = True
  End If
Loop

Men så er den oprindelige løsning vel at foretrække?
Avatar billede oasen Nybegynder
28. januar 2003 - 11:00 #16
?
Avatar billede oasen Nybegynder
09. februar 2003 - 15:29 #17
Jeg er gået over til MySQL nu, så jeg brugte dit svar nr. 2. Tak, Rune :)
Avatar billede medions Nybegynder
09. februar 2003 - 16:08 #18
Anytime ;o)
Thx 4 Poinz

//>Rune
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