Hej! jag har en väldigt segladdad gästbok på min community! Det beror nog helt på slarvig kod och många inlägg i databasen som den måste kolla igenom!
Här har jag 2 sql satser som jag tror man skulle kunna baka ihop till enda, vad tror ni? Det skulle nog spara mycket tid!
1:
SQL = "SELECT intUserid, strUser, strFran, intFranid, strDatum, id, intPrivat, strInlagg, intSvar FROM gb WHERE intUserid=" & Request.Querystring("id") & " ORDER BY id desc LIMIT " & iStart & " ," & iPageSize & " "
Set RS = Connect.Execute(SQL)
2:
If cint(Request.Querystring("id")) = cint(Session("id")) then
SQL = "SELECT intLast, intUserid FROM gb WHERE intUserid=" & Request.Querystring("id") & " AND intLast=0"
Set RS4 = Connect.Execute(SQL)
If not RS4.eof then
Do until RS4.eof
SQL = "UPDATE gb Set intLast = intLast + 1 WHERE intUserid=" & Request.Querystring("id") & ""
Connect.Execute(SQL),,128
RS4.movenext
loop
response.redirect "gastbok.asp?id="&session("id")
End if
End if
Förstår ni hur jag menar?
Har ni frågor angående koderna så fråga på! Den första är iallafall tänkt att hämta alla inlägg, den andra är till för att lägga till en 1:a på alla inlägg som man inte läst tidigare!
Vore jätte snällt om ni kunde hjälpa mig att optimera denna kod så mycket det bara går!
Jag skulle ta bort 2:an helt och lösa det på annat sätt. Är det bara för att kolla om det finns några nya inlägg sen man varit på sidan föra gången skulle jag köra en enkel koll med datum.
Varje gång en användare loggar in kan du uppdatera ett fält med inloggningsdatum och sedan jämföra detta med nytt på siten sedan förra besöket.
EX:
SQL = "SELECT * FROM gb WHERE datum > #" & lastlogin & "#"
Jag skulle ta bort 2:an helt och lösa det på annat sätt. Är det bara för att kolla om det finns några nya inlägg sen man varit på sidan föra gången skulle jag köra en enkel koll med datum.
Varje gång en användare loggar in kan du uppdatera ett fält med inloggningsdatum och sedan jämföra detta med nytt på siten sedan förra besöket.
EX:
SQL = "SELECT * FROM gb WHERE datum > #" & lastlogin & "#"
Hmm, man kan ju få gb medans man är inloggad oxå..
Inte för att det går snabbare men man ska alltid förhindra SQL-injections för alla personer på webben är inte lika snälla som på webforum :)
'- Replace
Function secure(txt)
txt = Replace(txt, "'", "''")
secure = txt
End Function
1:
SQL = "SELECT intUserid, strUser, strFran, intFranid, strDatum, id, intPrivat, strInlagg, intSvar FROM gb WHERE intUserid=" & secure(Request.Querystring("id")) & " ORDER BY id desc LIMIT " & iStart & " ," & iPageSize & " "
Set RS = Connect.Execute(SQL)
2:
If cint(Request.Querystring("id")) = cint(Session("id")) then
SQL = "SELECT intLast, intUserid FROM gb WHERE intUserid=" & secure(Request.Querystring("id")) & " AND intLast=0"
Set RS4 = Connect.Execute(SQL)
If not RS4.eof then
Do until RS4.eof
SQL = "UPDATE gb Set intLast = intLast + 1 WHERE intUserid=" & secure(Request.Querystring("id")) & ""
Connect.Execute(SQL),,128
RS4.movenext
loop
response.redirect "gastbok.asp?id="&session("id")
End if
End if
Inte för att det går snabbare men man ska alltid förhindra SQL-injections för alla personer på webben är inte lika snälla som på webforum :)
'- Replace
Function secure(txt)
txt = Replace(txt, "'", "''")
secure = txt
End Function
1:
SQL = "SELECT intUserid, strUser, strFran, intFranid, strDatum, id, intPrivat, strInlagg, intSvar FROM gb WHERE intUserid=" & secure(Request.Querystring("id")) & " ORDER BY id desc LIMIT " & iStart & " ," & iPageSize & " "
Set RS = Connect.Execute(SQL)
2:
If cint(Request.Querystring("id")) = cint(Session("id")) then
SQL = "SELECT intLast, intUserid FROM gb WHERE intUserid=" & secure(Request.Querystring("id")) & " AND intLast=0"
Set RS4 = Connect.Execute(SQL)
If not RS4.eof then
Do until RS4.eof
SQL = "UPDATE gb Set intLast = intLast + 1 WHERE intUserid=" & secure(Request.Querystring("id")) & ""
Connect.Execute(SQL),,128
RS4.movenext
loop
response.redirect "gastbok.asp?id="&session("id")
End if
End if
Tackar! Dock visste jag redan det ;) Men hade missat de där, så va bra att du tog upp det!
Men ingen som vet nått bra sätt att optimera min kod?
Då har du helt fel villkor i din UPDATE. Du anger ju bara användar-ID som villkor, och då kan jag inte förstå att du vill ha den i loopen.
Om jag har förstått saken rätt: lägg till and intLast = 0 i din update, så uppdaterar den allt oläst till läst på den användarens gästbok. Denna ska du köra en gång. Du kan alltså skippa din loop.