SPiN Nej, om du inte har med order by vet du aldrig säkert i vilken ordning du får posterna.
brw
Du får bygga upp din order by dynamiskt. Jag har inte tid att skriva hela koden nu men du får använda funktionen iif (du använder väl Access) enligt detta mönster
order by iif(id=6,1,iif(id=8,2,iif(id=5,3,100000)))
<%
Dim maxNumber,strSQL,connection,rs,cnt,rndNumber,i,found
set connection = server.createobject("adodb.connection")
connection.open "dsn"
maxnumber = 3
strSQL = "SELECT namn,width FROM banner "
set rs = connection.execute(strSQL)
if not rs.eof then
arr = rs.getrows()
items = ubound(arr,2) + 1
if items < maxNumber then maxNumber = items
dim choosen()
redim choosen(maxnumber-1)
randomize
cnt = 0
Do Until cnt = maxnumber
RndNumber = Int(Rnd * items)
found = false
for i = 0 to cnt - 1
if choosen(i) = rndNumber then
found = true
exit for
end if
next
if not found then
choosen(cnt) = rndNumber
cnt = cnt + 1
response.write arr(0,rndNumber) & "<br>" & arr(1,rndNumber) & "<br>"
end if
loop
else
response.write "?"
end if
rs.Close
Set Rs = Nothing
connection.close
set connection = nothing
%>
Jag hämtar upp alla värdena till en array och plockar värdena direkt ur den istället för att ställa två frågor mot databasen.
Om du skulle bygga en fråga med order by så skulle du behöva göra olika varianter för sql server och access. (I sql server fallet en case och iif för access).
Om du har väldigt mycket data så är det effektivare att hämta antalet rader med en
select count(*) from banner
och sedan bygga sql-satsen, men som sagt du får du problem med olika dbms.
Det är ju inte speciellt testat (dvs inte alls), så du får återkomma om det är något problem.
Koden fungerar jävligt bra fast jag ångrar mig lite.. jag skulle bara vilja slumpa fram 1 av alla poster.. hur gör jag bäst då med koden jag fick av dig (LarsG)?