Avatar billede loukas Mester
11. december 2006 - 12:26 Der er 12 kommentarer og
1 løsning

4 tilfældige poster fra DB

Jeg har fundet den her stump kode som også fungerer,
Nogle gange retuner den 1 post andre gange mange flere.
Kan jeg ikke få den til altid at retunere 4 tilfældige poster?

set rs = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * FROM aktiviteter ORDER BY ugedagnr"
rs.Open SQL, objConn, 1

randomize
rs.Move(int(rs.RecordCount * rnd))
Avatar billede coderdk Praktikant
11. december 2006 - 12:33 #1
Prøv:

SQL = "SELECT TOP 4 * FROM aktiviteter ORDER BY RAND()"
Avatar billede coderdk Praktikant
11. december 2006 - 12:34 #2
Det kan sgu godt være det ikke virker :) Prøv at kigge på:

http://databases.aspfaq.com/database/how-do-i-retrieve-a-random-record.html
Avatar billede madeindk Nybegynder
11. december 2006 - 13:07 #3
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("Driver={MicroSoft Access Driver (*.mdb)};DBQ=c:\mappe1\mappe2\database.mdb")

Set rs = Server.CreateObject("ADODB.Recordset")
SQL = "Select * From Tabel"
rs.Open SQL, Conn, 1

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

Response.Write rs("Felt")
%>
Avatar billede madeindk Nybegynder
11. december 2006 - 13:08 #4
Så kan du bare sætte SELECT TOP 4 * FROM tabel
Avatar billede loukas Mester
11. december 2006 - 14:10 #5
madindk->
øøh, måske forstår jeg forkert, men
Hvis jeg først har lavet SELECT TOP 4 *
Så har jeg valgt top 4 records, og så finder jeg bagefter en tilfældig record ud af de 4 ??

Jeg skal bruge 4 tilfældige records fra HELE tabellen.

Har prøvet med nedenstående kode, men problemet er at ID1, ID2, ID3 og ID4 kan blive ens.
'trin 1, finder antal records *********************************************************''
    set rs = objConn.execute("SELECT COUNT(id) FROM aktiviteter")
    rCount = rs(0)

'trin 2
    set rs = objConn.execute("SELECT id FROM aktiviteter")
    cnt = 1
    dim RRs
    redim RRs(rCount)
    do while not rs.eof
        RRs(cnt) = rs(0)
        cnt = cnt + 1
        rs.movenext
    loop

'trin 3
    randomize
    currentRR = cLng(rnd*rCount+0.5)
    ID1 = RRs(currentRR)
   
    randomize
    currentRR = cLng(rnd*rCount+0.5)
    ID2 = RRs(currentRR)

    randomize
    currentRR = cLng(rnd*rCount+0.5)
    ID3 = RRs(currentRR)   

    randomize
    currentRR = cLng(rnd*rCount+0.5)
    ID4 = RRs(currentRR)
Avatar billede madeindk Nybegynder
11. december 2006 - 14:19 #6
Nårh ja, men kan du ikke gøre sådan her?

<%
Set rs = Server.CreateObject("ADODB.Recordset")
SQL = "Select * FROM tabel ORDER BY RAND() "
rs.Open SQL, Conn, 1

Do While not rs.eof Then

  Response.Write(rs("ditFelt")
  rs.movenext

Loop
%>

Er ikke sikker på RAND() virker i Access, hvis det er det du kører med.
Avatar billede loukas Mester
11. december 2006 - 14:22 #7
jo, det er desværre Access
Avatar billede madeindk Nybegynder
11. december 2006 - 14:30 #8
Og det virker ikke?
Avatar billede loukas Mester
11. december 2006 - 15:38 #9
nej :-(
Avatar billede goose Nybegynder
11. december 2006 - 15:48 #10
Avatar billede ldanielsen Nybegynder
12. december 2006 - 12:49 #11
SQL = "Select * FROM tabel ORDER BY RND(ID)"

- på betingelse af at du har et unikt numerisk felt, her kaldet ID
Avatar billede ldanielsen Nybegynder
12. december 2006 - 12:50 #12
Det er vist 10. gang jeg svarer på det indenfor den sidste måned, gad vide hvorfor det er så populært lige nu? Måske laver alle julekonkurrencer for tiden.
Avatar billede ldanielsen Nybegynder
19. december 2006 - 11:39 #13
Sal der ikke lukkes her?
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