Avatar billede Slettet bruger
23. januar 2008 - 23:23 Der er 11 kommentarer og
1 løsning

tilfældigt output fra database

Hejsa...

- Jeg vil gerne have en række poster hentet ud fra en database i en tilfældig rækkefølge - og jeg plejer at gør det lidt a la det her:

randomize
rndNum = int(-1000*rnd())
set rs = conn.execute("select top 30 * from forsidebillede order by rnd(" & rndNum & "*id)")

- Men i denne her database er id (primærnøglen) ikke et tal men et replikerings-id og det skal det være...
Hvordan kan man så gøre det?

\Dan
Avatar billede cpufan Juniormester
24. januar 2008 - 21:05 #1
prøv med

set rs = conn.execute("select top 30 * from forsidebillede order by newid()")
Avatar billede Slettet bruger
24. januar 2008 - 21:24 #2
hej cpufan

- der er ikke noget i tabellen i databasen som hedder "newid"... Er dette ligemeget eller hvad?

\Dan
Avatar billede cpufan Juniormester
24. januar 2008 - 22:16 #3
ja det skulle det være....

det fungerer som en randomfunktion, men er ikke afprøvet på access, det virker dog på en ms sql server.

hvilken database drejer det sig om?
Avatar billede Slettet bruger
24. januar 2008 - 22:20 #4
- det er en access-database jeg har med at gøre..

men hvad så med de to ovenstående linjer:
randomize
rndNum = int(-1000*rnd())

- skal de så ikke med?

\Dan
Avatar billede cpufan Juniormester
24. januar 2008 - 22:33 #5
nej det er ikke nødvendigt, men prøv det lige, måske virker det kun på ms sql-server og ikke på ms access.
Avatar billede Slettet bruger
24. januar 2008 - 22:38 #6
Det virker ikke... Får denne her fejl:

Microsoft JET Database Engine
error '80040e14'
Undefined function 'newid' in expression.
/test/forsiden/source/frontpic.asp
line 7

linje 7 er den linje med sql-sætningen...

\Dan
Avatar billede cpufan Juniormester
24. januar 2008 - 22:39 #7
http://p2p.wrox.com/topic.asp?TOPIC_ID=6190

nej det læste jeg lige,

men se på denne, den kan hjælpe dig.
Avatar billede Slettet bruger
24. januar 2008 - 22:46 #8
den forstår jeg ikke ret meget af... som jeg ser det så er der jo her risiko for at den kan tage den samme to eller flere gange - og det må den ikke her.

i tabellen i databasen er der mange flere poster end 30 - men den må kun tage de 30 nyeste poster - og det skal så være i tilfældig rækkefølge...

kan man lave noget med at lave det til et array og så i asp gør det tilfældigt?

\Dan
Avatar billede cpufan Juniormester
24. januar 2008 - 23:49 #9
jo, det kan du da.
Avatar billede Slettet bruger
24. januar 2008 - 23:52 #10
- ok... vil du vise et eksempel...

hvis jeg for eksempel har et array som ser sådan her ud:

arr = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30"

der er der 30 poster fra databasen - hvordan laver man så et script som viser dem i tilfældig rækkefølge, hvor alle er med kun en gang...

\Dan
Avatar billede cpufan Juniormester
25. januar 2008 - 00:23 #11
arr = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30"


Function RndAr(ByVal a)
iTop = UBound(a)
iBot = LBound(a)
Randomize Timer
For iCount = iBot to iTop
iTemp = Int(Rnd * (iTop + 1))
aTempHold = a(iCount)
a(iCount) = a(iTemp)
a(iTemp) = aTempHold
Next
RndAr = a
End Function

RndAr(arr)
Avatar billede Slettet bruger
25. januar 2008 - 00:35 #12
- hej igen cpufan.

- vil du ikke godt prøve at forklare det her... for jeg kender ikke ret meget til randomize-princippet i asp.

hvis jeg nu under normale omstændigheder skal hente mit ovenstående array og udskrive det i rækkefølge ville jeg gøre det sådan her:

<%
arr = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30"
strarr = split(arr,",")
for a=0 to ubound(strarr)
response.write strarr(a)
next
%>

- hvordan gør vi så denne tilfældig?

\Dan
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