Avatar billede Jman Praktikant
17. november 2004 - 13:43 Der er 9 kommentarer og
1 løsning

Select 3 random fra database

Dette script finder en random post. Men hvordan skal det gøres, så jeg finder 3 random (og de må ikke være ens)

<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../datab.mdb")
Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "select * From DB"
rs.Open strSQL, Conn, 3, 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
%>
<!-- Her er htmlkoden -->
<%
rs.Close
Set rs = Nothing
Conn.Close
Set Conn = Nothing
%>
Avatar billede Jman Praktikant
17. november 2004 - 15:33 #1
hæver læige point
Avatar billede hiks Nybegynder
17. november 2004 - 15:51 #2
det var da pænt af dig! :o)

Prøv følgende:
<%
'//åbning af db
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../datab.mdb")
Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "select * From DB"
rs.Open strSQL, Conn, 3, 1

If rs.eof = false then
    '//hent dine poster ind i array
    arrayRS = rs.GetRows()

    '//find 3 poster
    tot_unik = 3 'antallet af unikke tal
    top_number = Ubound(arrayRS, 2)

    dim random_number, counter, check, unique_numbers

    Redim random_number(tot_unik)
    Randomize

    For counter = 1 to tot_unik
        random_number(counter) = Int(Rnd * top_number)+1
        for check = 1 to counter - 1
            if random_number(check)= random_number(counter) then
            counter = counter - 1
            end if
        next
    next

    For counter = 1 to tot_unik
        response.write "<li>" & arrayRS(1, random_number(counter)) & " >" & arrayRS(2, random_number(counter)) & "</li>"
    next
End if
%>

/hiks
Avatar billede Jman Praktikant
17. november 2004 - 16:19 #3
'så lidt ;)
Nu er det noget med arrays, kan jeg se.. det er jeg ikke skarp til..
Kan du indflette dette (det er det enkeltsteånde modul, der gerne skulle hentes random 3 gange):

<table width="160" border="0" cellpadding="0" cellspacing="0" class="default" background="./images/Offer_BG.gif">
  <tr><td class="tdDesign"><div class="OfferHeader"><%=RS("OfferTitle")%></div></td></tr>
  <tr><td class="tdDesign"><img src="./images/Offer_Top.gif"></td></tr>
  <tr><td align="center"><% if rs("OfferPict") <> "" then%><img src="http://www.fotokaeden.dk/upload/variable/<%=rs("OfferPict")%>" width="130"><%end if%></td></tr>
  <tr><td class="Offer"><%=rs("OfferDescr")%></td>
  <tr><td class="tdDesign"><img src="./images/Offer_Bottom.gif"></td></tr>
  <tr><td class="tdDesign" background="./images/spacer_grey.gif"><div class="OfferPrePrice"><%=rs("OfferPrePrice")%>&nbsp;<Span class="OfferPrice"><%=formatnumber(rs("OfferPrice"),2)%></Span></div></td></tr>
  <tr><td class="tdDesign" background="./images/spacer_grey.gif"><img src="./images/spacer_grey.jpg" height="10"></td></tr>
</table>
Avatar billede hiks Nybegynder
17. november 2004 - 16:37 #4
hvis du lige kan skrive hvilke felter der er i dit udtræk (alle) i samme orden som i din tabel.

/hiks
Avatar billede Jman Praktikant
17. november 2004 - 16:41 #5
hæhæ -. jeg er ved at få det til at du - skal bare lige have hver tabel ved siden af hinanden i stedet for under.. så er den der vist :)
Avatar billede Jman Praktikant
17. november 2004 - 16:46 #6
Det var sgu et lækkert lille script .. skulle bare lige finde ud af at tallet i arrayet angav kolonnenr. - læg et svar :o)
Avatar billede hiks Nybegynder
17. november 2004 - 16:48 #7
ok - det styrer du jo helt så! :o)

svar fra mig her!

/hiks
Avatar billede Jman Praktikant
17. november 2004 - 16:54 #8
tak for hjælpen
Avatar billede Jman Praktikant
30. november 2004 - 12:12 #9
du kunne vel ikke lige lokkes til at kigge på koden igen.. c",)

Når der præcis ligge 3 tilbud i databasen looper scriptet uendeligt (?)
Avatar billede hiks Nybegynder
30. november 2004 - 12:18 #10
jeg er lidt tidspresset pt. men kan du ikke lave een if statement omkring det hele der siger at hvis

    tot_unik = 3 'antallet af unikke tal
    top_number = Ubound(arrayRS, 2)

If tot_unik = top_number + 1 then
  'brug hele arrayet
Else
  'brug tilfældighed
End If

- tror ikke det looper uendeligt - jeg tror bare at den er uendelig lang tid om at finde lige de 3.

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