Avatar billede ralley Nybegynder
07. maj 2002 - 20:07 Der er 12 kommentarer

Random poster fra database.

Hej

Jeg har en database hvorfra jeg ønsker at trække 2 random poster hvergang jeg går ind i en ny uge.

Hvordan gør jeg det?

// Ralley
Avatar billede medions Nybegynder
07. maj 2002 - 20:09 #1
Her har du en random funktion...:

    Function ShowJoke()
        Randomize
        RandNum = Int(Rnd * go("Show")) + 1
        rs.MoveFirst
            For i = 1 to RandNum - 1
                rs.MoveNext
            Next
        Response.Write("<center><img src=""img/smileys/smily" & rs("placering") &".gif""></center>" & "<p>" & Replace(rs("Joke"),vbCrLf, "<br>"))
    End Function

//>Rune
Avatar billede medions Nybegynder
07. maj 2002 - 20:11 #2
If WeekDay(Date()) = 0 Then
  Function ShowJoke()
        Randomize
        RandNum = Int(Rnd * go("Show")) + 1
        rs.MoveFirst
            For i = 1 to RandNum - 1
                rs.MoveNext
            Next
        Response.Write("<center><img src=""img/smileys/smily" & rs("placering") &".gif""></center>" & "<p>" & Replace(rs("Joke"),vbCrLf, "<br>"))
    End Function
End If

sådan..
//>Rune
Avatar billede medions Nybegynder
07. maj 2002 - 20:12 #3
Forresten er Go("Show") et count fra SQL!

If WeekDay(Date()) = 0 Then
  Function ShowJoke()
        Randomize
        RandNum = Int(Rnd * go("Show")) + 1
        rs.MoveFirst
            For i = 1 to RandNum - 1
                rs.MoveNext
            Next
        Response.Write(rs("kolonne1") & " " & rs("kolonne2"))
    End Function
End If

Ups... du ville jo ha' 2 ud..
//>Rune
Avatar billede medions Nybegynder
07. maj 2002 - 20:15 #4
Her er så det hele sammenlagt...
<%
    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db/jokedb.mdb")

    SQL = "SELECT * FROM tblJokes"
    Set rs = Conn.Execute(SQL)
           
    SQLCount = "SELECT Count(*) As Show FROM tblJokes"
    Set go = Conn.Execute(SQLCount)
           
    Function ShowJoke()
        Randomize
        RandNum = Int(Rnd * go("Show")) + 1
        rs.MoveFirst
            For i = 1 to RandNum - 1
                rs.MoveNext
            Next
        Response.Write(Replace(rs("Joke"),vbCrLf, "<br>") & " " & Replace(rs("Joke"),vbCrLf, "<br>"))
    End Function
%>

Held og lykke med det..
//>Rune
Avatar billede ralley Nybegynder
07. maj 2002 - 20:19 #5
Jeg ser lige om jeg kan få det til at virke..............
Avatar billede medions Nybegynder
07. maj 2002 - 20:20 #6
Nej hov.. her er den rigtige...:

<%
    If WeekDay(Date()) = 0 Then
        Set Conn = Server.CreateObject("ADODB.Connection")
        Conn.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db/jokedb.mdb")

        SQL = "SELECT * FROM tblJokes"
        Set rs = Conn.Execute(SQL)
               
        SQLCount = "SELECT Count(*) As Show FROM tblJokes"
        Set go = Conn.Execute(SQLCount)
               
        Function ShowJoke()
            Randomize
            RandNum = Int(Rnd * go("Show")) + 1
            rs.MoveFirst
                For i = 1 to RandNum - 1
                    rs.MoveNext
                Next
            Response.Write(Replace(rs("Joke"),vbCrLf, "<br>") & " " & Replace(rs("Joke"),vbCrLf, "<br>"))
        End Function
    End If
%>

Sorry!!
//>Rune
Avatar billede cms Nybegynder
07. maj 2002 - 20:25 #7
5. gang er lykkens gang :)
Avatar billede medions Nybegynder
07. maj 2002 - 20:28 #8
*G* yep... :-)
-ved ik' hvor meget du har fulgt med i mine svar.. men nogle gange om søndagen når man har tømmer mænd, kan jeg komme helt op på det 9 svar :-D

//>Rune
Avatar billede eagleeye Praktikant
09. maj 2002 - 01:29 #9
Hvis jeg har forstået dit spørgsmål rigtigt så skal du ved hver uge skift finde to nye (random) jokes som skal vises på din side hele ugen. Altså i løbet af ugen vil der ikke ske ændringer i de to jokes.

Hvis du skal skifte hver uge skal du vel havde en tabel som holder styr på hvilke to Jokes er valgt den uge. Ideen i det script jeg har lavet her er at man loader siden, tjekker på hvilke to jokes skal vises ved opslag i jokesToShow tabellen. Hvis man får et tomt recordset tilbage er det en ny uge og to nye random records skal vælges, samt jokesToShow tabellen opdateres med de to nye records. Derefter udskrives de to jokes som er valgt.

Eks på tabellen jokesToShow:
ID : autonummer
weekno : tal
jokesNo : notat
I denne tabel ligger du til at starte med eksvis ID=1 weekno=1 jokesNo = 1,2.

Så antager jeg du har en tabel men alle dine jokes i (jokestabel), hvor du som mininum har to kolonner:
ID : autonnummer
joketext : text eller notat


Det script som finder to random records er måske lidt i overkandten af hvad der er nødvendig for at finde to tal. Det er lavet så general at du bare ændre antalRandom = 2 til noget andet hvis du vil havde flere jokes. Ligelede vil det for en uge ikke finde samme random jokes.


<%
set rs = server.CreateObject("ADODB.Recordset")
set connetion = server.CreateObject("ADODB.Connection")
connetion.Open "Data Source="& server.mappath("db.mdb") & ";Provider=Microsoft.Jet.OLEDB.4.0;"

SQL = "SELECT * FROM jokesToShow WHERE weekno = " & DatePart("ww",Date())
set rs = connection.execute(SQL)
if rs.EOF OR rs.BOF then
  'Tabel tom pga nu uge
  antalRandom = 2
  Rs.Open "SELECT * FROM jokesTabel", connection,1,3
  inDB = rs.RecordCount
  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)
  strID = ""
  For i = Lbound(myArr) to Ubound(myArr)
    rs.move myArr(i),1
    strID = strID & rs("ID") & ","
  next
  strID = Left(strID,len(strID)-1)
  Rs.Close
  SQL = "UPDATE jokesToShow SET jokesNo = '" & strID & "'"
  connection.execute(SQL)
else
  strID = rs("jokesNo")
end if

SQL = "SELECT * FROM jokesTabel WHERE ID IN (" & strID & ")"
set rs = connection.execute(SQL)
do while not rs.EOF
  Response.Write rs("joketext") & "<br>"
loop
connection.close
%>

Jeg håber du kan se ideen i det :)
Avatar billede medions Nybegynder
30. august 2002 - 17:42 #10
Hmm skal dette spm ikke snart afsluttes?

//>Rune
Avatar billede eagleeye Praktikant
22. september 2002 - 00:06 #11
Jo det var da en god ide..

Kunne det bruges til noget????
Avatar billede websam Nybegynder
05. december 2002 - 13:27 #12
pisse iriterende når folk ikke kan lære at lukke *GG* jeg har lige et enkelt spørgsmål til medions hvorfor vælger du at lave det i en funktion kan det ikke lige så godt køre uden ???
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