Kan jag sortera efter ID enligt nedan och isf. hur?
SELECT * FROM bilder WHERE ID in (6,8,5) ORDER BY ID (6,8,5)
6,8,5 kommer från en variabel som har slumpats fram..
------------------
Ingenting är omöjligt, bara en utmaning.
7 svar · 201 visningar · startad av brw
Kan jag sortera efter ID enligt nedan och isf. hur?
SELECT * FROM bilder WHERE ID in (6,8,5) ORDER BY ID (6,8,5)
6,8,5 kommer från en variabel som har slumpats fram..
------------------
Ingenting är omöjligt, bara en utmaning.
Om du plockar bort hela ORDER BY borde du få ut det i samma ordning som de står i, i IN-satsen. Annars förstår jag inte hur du menar?!
------------------
SPiN, bjorne.w@telia.com
Nej.. det blir liksom inte i den ordningen... om jag tar bort ORDER BY... helmysko.. trodde den skulle ta det i den ordningen jag med..
kolla denna:
<%
Dim objConn, objRst, strSQL, strConnection, str, str1, cnt, cnt1, rndMax, RndNumber
maxnumber = 3
strSQL = "SELECT * FROM banner "
'objConn = connection
Set objRst = Server.CreateObject("ADODB.Recordset")
'Connection.Open strConnection
set objRst.ActiveConnection = Connection
objRst.LockType = adLockOptimistic
objRst.CursorType = adOpenKeySet
objRst.Open strSQL
objRst.MoveLast
cnt = objRst.RecordCount
cnt1 = cnt
rndMax = cnt
If cint(maxNumber) < cnt Then
cnt1 = cint(maxNumber)
End If
str = ","
str1 = ","
response.write "CNT: " & cnt & "<br>"
response.write "CNT1: " & cnt1 & "<br>"
response.write "rndmax: " & rndmax & "<br>"
response.write "maxnumber: " & maxnumber & "<br>"
response.write "str: " & str & "<br>"
response.write "str1: " & str1 & "<br>"
Do Until cnt1 = 0
Randomize
RndNumber = Int(Rnd * rndMax)
If (InStr(1, str1, "," & RndNumber & "," ) = 0) Then
str1 = str1 & RndNumber & ","
cnt1 = cnt1 - 1
objRst.MoveFirst
objRst.Move RndNumber
str = str & objRst("id") & ","
End If
Loop
objRst.Close
Set objRst = Nothing
If Right(str,1) = "," Then
str = Left(str, len(str)-1)
End If
If Left(str,1) = "," Then
str = Right(str, len(str)-1)
End If
sql = "SELECT * FROM banner WHERE ID in (" & str & ") "
'Set objRst = Server.CreateObject("ADODB.Recordset")
'set objRst.ActiveConnection = Connection
'objRst.LockType = adLockOptimistic
'objRst.CursorType = adOpenKeySet
response.write sql
Set objrst = Connection.Execute(sql)
'ObjRst.Open sql
%>
<% do until objRst.eof %>
<%=objRst("namn")%><br><%=objRst("width")%><br>
<%
objRst.movenext
loop
%>
<%
objRst.Close
Set objRst = Nothing
'objConn.Close
'Set objConn = Nothing
%>
------------------
Ingenting är omöjligt, bara en utmaning.
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)))
------------------
essentitia preter non sans multiplicandum
LarsG... du får gärna hjälpa mig med koden när du får tid över... den där funktionen vet jag inte riktigt hur jag ska få till enligt min kod...
Mycket tacksam för all hjälp :h
Red:
just nu kör jag SQL från jobbet.. men hemma Access så om det går att få den att fungera i båda så vore det bra.. det är ett bannerscript
------------------
Ingenting är omöjligt, bara en utmaning.
[Redigerat av brw den 31 jan 2002]
Jag skrev om det lite ...
<%
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.
------------------
essentitia preter non sans multiplicandum
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)?
:h
------------------
Ingenting är omöjligt, bara en utmaning.
[Redigerat av brw den 06 feb 2002]
Enklaste är att byta till
maxnumber=1
------------------
essentitia preter non sans multiplicandum