Avatar billede quarkb Nybegynder
16. september 2008 - 21:56 Der er 19 kommentarer og
1 løsning

Random select med SQL

Er det muligt at bruge en random funktion i nedenstående SQL sætning?
sql = "SELECT TOP 1 * FROM [Nyheder]"
Altså erstatte TOP 1 med random?
Avatar billede Slettet bruger
16. september 2008 - 21:57 #1
Kender du RAND() ?

SELECT * FROM table ORDRE BY RAND()

EVT:
SELECT * FROM table WHERE noget = 'top1' ORDRE BY RAND()
Avatar billede Slettet bruger
16. september 2008 - 21:57 #2
Er det sådan du mener?
Avatar billede quarkb Nybegynder
16. september 2008 - 22:08 #3
Det jeg har brug for er at kunne hente en tilfældig post frem fra database og vise den.

Jeg har prøvet
SELECT * FROM [Nyheder] ORDRE BY RAND()
det giver denne fejl
Undefined function 'RAND' in expression.
Avatar billede quarkb Nybegynder
16. september 2008 - 22:16 #4
Skal måske lige for god ordensskyld sige at jeg bruge en access database.
Avatar billede showsource Seniormester
16. september 2008 - 22:34 #5
Jeg vil vædde på det er ORDER og ikke ORDRE

Hvad random funktion hedder i access ved jeg ikke, men det kunne jo være RANDOM() :O)
Avatar billede quarkb Nybegynder
16. september 2008 - 22:38 #6
ORDRE var selv følgelig en tryk fejl. RANDOM() i Access hedder RND(), men denne funktion giver mig bare den sidst oprettet post. :O(
Avatar billede arne_v Ekspert
16. september 2008 - 22:45 #7
Der skal vel bruges baade TOP 1 og ORDER BY RND()
Avatar billede mitbrugernavn Praktikant
17. september 2008 - 08:27 #8
access har ikke nogen random funktion - så du skal have kode dig ud af det

'//åbning af db
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("stien til din database")
Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "select * From dintabel"
rs.Open strSQL, Conn, 3, 1

If rs.eof = false then
    '//hent dine poster ind i array
    arrayRS = rs.GetRows()
    '//find 3 post
    tot_unik = 3 'det kan du ændre hvis du har lyst
    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

'dvs at dine poster bliver hentet til et array og den tager så random derfra.
Avatar billede quarkb Nybegynder
17. september 2008 - 16:25 #9
Din løsning mitbrugernavn for min webserver til at gå kold.
Avatar billede w13 Novice
17. september 2008 - 16:28 #10
Prøv evt. at udelade sektioner af koden for at finde delen, der ødelægger det.
Avatar billede quarkb Nybegynder
17. september 2008 - 16:36 #11
Det går galt her:

if random_number(check)= random_number(counter) then
  counter = counter - 1
end if
Avatar billede showsource Seniormester
17. september 2008 - 16:49 #12
Har du prøvet arne_v's forslag ?
Avatar billede w13 Novice
17. september 2008 - 16:51 #13
Du må vist heller ikke trække noget fra counter i en for.
Avatar billede quarkb Nybegynder
17. september 2008 - 17:46 #14
Jeg har prøvet arne_v's forslag, det virker ikke,

Jeg har rettet - 1 til + 1, så henter den ganske rigtig posterne.

Men det jeg er ude efter en en funktion som kan hente et billede fra en billede database og vis et ny billede hver gang siden vises.
Avatar billede w13 Novice
17. september 2008 - 22:43 #15
Vi kan umuligt hjælpe med at få arne_v's forslag til at virke, hvis du ikke fortæller os, hvad der sker.
Avatar billede softspot Forsker
18. september 2008 - 10:36 #16
Jeg har lige fundet denne frem (mit forslag til en anden bruger for et par år siden i dette indlæg: http://www.eksperten.dk/spm/648528):

Randomize
rndIdx = -int(1000*Rnd())+1
strSQL = "SELECT TOP 1 * FROM [Nyheder] ORDER BY Rnd(" & rndIdx & "*ID)"
Avatar billede softspot Forsker
18. september 2008 - 10:42 #17
Det kunne være du skulle bruge denne i stedet:

Randomize
rndIdx = -int(1000*Rnd())+1
strSQL = "SELECT TOP 1 Rnd(" & rndIdx & "*ID), * FROM [Nyheder] ORDER BY 1"
Avatar billede softspot Forsker
18. september 2008 - 10:44 #18
NB: Man kan ikke bruge RND direkte i SQL-sætningen, da den bliver genereret én gang og så er det den samme værdi for alle rækker - og det giver jo ikke meget værdi ifht. at sortere på den... :-)
Avatar billede quarkb Nybegynder
18. september 2008 - 16:20 #19
Perfekt softspot dit forslag var lige det jeg manglede.
Lav et svar og du får point.
Avatar billede quarkb Nybegynder
28. oktober 2008 - 22:21 #20
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