Avatar billede unknown_someone Juniormester
23. marts 2003 - 23:06 Der er 8 kommentarer og
1 løsning

tilfældige poster fra access

hvordan fa** får jeg udtrukket 3 tilfældige poster i en database?? har søgt og søgt, men endnu ikke fundet en holdbar løsning.  Har flere steder læst at

SELECT RND(ann_ID), link FROM annonce ORDER BY Rnd(ann_id)

eller bare

SELECT TOP 3 * FROM annonce ORDER BY Rnd(ann_id)

burde virke, men det er konstant samme rækkefølge...
Avatar billede hossein Nybegynder
23. marts 2003 - 23:15 #1
prøv den her måde:
<%
  dim objConn, objRS
  dim intRandom, intMax
  dim strSQL1, strSQL2
 
  Randomize()
 
  strSQL1 ="Select Max(ID) From myTable Order By ID" 
  strSQL2 ="Select Top 1 ID,... From myTable Where ID >= " 
 
 
  Set objConn = Server.CreateObject("ADODB.Connection")
  Set objRS = Server.CreateObject("ADODB.RecordSet")
 
  Call objConn....
  Call objRS.Open(strSQL,objConn)
    intMax = objRS.Fields(0).Value
  Call objRS.Close
 
  intRandom = (Rnd() * intMax)\1 + 1
 
  Call objRS.Open(strSQL2 & intRandom &" Order By ID",objConn)
    ...
%>
Avatar billede unknown_someone Juniormester
24. marts 2003 - 07:38 #2
jeg har ikke prøvet det endnu - men risikerer man med det ikke at den tager et id der ikke eksisterer hvis man har slettet nogle poster?
Avatar billede oasen Nybegynder
24. marts 2003 - 10:05 #3
Set rs = Server.CreateObject("ADODB.RecordSet")
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


- Således vil du altid få returneret en post, der findes.
Avatar billede unknown_someone Juniormester
24. marts 2003 - 10:50 #4
og hvis det så skulle være 3 tilfældige - uden gengangere?
Avatar billede oasen Nybegynder
24. marts 2003 - 11:02 #5
Tjoo... så kunne du lave det sådan:


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

Do While str3 = ""
    rs.MoveFirst
    Randomize
    rs.Move(int(rs.RecordCount * rnd))
    If Not rs.EOF And Not rs.BOF Then
        If str1 = "" Then
            str1 = rs("Felt")
        ElseIf str1 <> rs("Felt") Then
            str2 = rs("Felt")
        ElseIf str1 <> rs("Felt") And str2 <> rs("Felt") Then
            str3 = rs("Felt")
        End If
    End If
Loop


Response.Write str1 & "<br>" & str2 & "<br>" & str3
Avatar billede oasen Nybegynder
24. marts 2003 - 13:37 #6
Du får den lige en gang til med en lille korrektion:


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

Do While str3 = ""
    rs.MoveFirst
    Randomize
    rs.Move(int(rs.RecordCount * rnd))
    If Not rs.EOF And Not rs.BOF Then
        If str1 = "" Then
            str1 = rs("Felt")
        ElseIf str2= "" And str1 <> rs("Felt") Then
            str2 = rs("Felt")
        ElseIf str1 <> rs("Felt") And str2 <> rs("Felt") Then
            str3 = rs("Felt")
        End If
    End If
Loop


Response.Write str1 & "<br>" & str2 & "<br>" & str3
Avatar billede hossein Nybegynder
24. marts 2003 - 18:11 #7
Rigtig, hvis det er store gab mellem ID nr. så virker den ikke. Men man kan ikke klare den bedre med m$Access.
Avatar billede oasen Nybegynder
25. marts 2003 - 15:43 #8
Den mangler en Rand()
Avatar billede unknown_someone Juniormester
06. maj 2003 - 12:24 #9
fik ikke en 100% løsning, så jeg blev nødt til at lave det med flere sql-kald

lukker
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