<%
strDSN = "FILEDSN=cbwh_chat.dsn"
Set cn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
cn.Open strDSN
strSQL = "SELECT * FROM Message WHERE " _
& "DateDiff('N', Moment, Now) < 30 ORDER BY Moment DESC;"
rs.Open strSQL, cn
n = 0
do while (not rs.EOF) and (n < 20)
strUser = rs("FromUser")
strMessage = ""
if strUser <> "System" then
strMessage = "<i>" & strUser & "</i>: "
end if
strMessage = strMessage & rs("Message") & " <small>(" _
& FormatDateTime(rs("Moment"), 3) & ")</small>"
if strUser = "System" then
strMessage = "<font color=""777777""><b><i>" _
& strMessage & "</i></b></font>"
end if
response.write strMessage & "<br>" &vbCRLF
n = n + 1
rs.MoveNext
loop
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
%>
Lite förklarande text hittade jag också
This means that we will display only messages written in the last T minutes, but not more than M messages. Personally, I consider that a combination like displaying the last 20 messages written in the last 30 minutes could be a right choice in many cases.
litet n i
(n < 20)
n = n + 1
torde betyda antalet mess som jag vill visa
Men vad betyder stort N i
Ja det är ett villkor för hur många varv loopen har gått. Skulle varit effektivare att selektrera antalet direkt i SQL-frågan. "n" i detta fallet är ett variabelnamn på en kontrollvariabel. Normalt brukar man i första hand använda "i" som variabelnamn för kontrollvariabler i loopar.
Skulle varit effektivare att selektrera antalet direkt i SQL-frågan. "n" i detta fallet är ett variabelnamn på en kontrollvariabel. Normalt brukar man i första hand använda "i" som variabelnamn för kontrollvariabler i loopar.
Jag skulle använt TOP 20 (Access) och LIMIT 20 (MySQL) för att bara hämta de senaste 20 posterna. Onödigt att hämta en massa data som inte ska användas.
Jag skulle använt TOP 20 (Access) och LIMIT 20 (MySQL) för att bara hämta de senaste 20 posterna. Onödigt att hämta en massa data som inte ska användas.