webForumDet fria alternativet

Fel på sql (script timeout)

6 svar · 559 visningar · startad av jimpa

jimpaMedlem sedan jan. 2001361 inlägg
#1

Hej,
Jag försöker plocka ut den senaste posten is tabellen "replies" samt User id och User namn i tabellen "Users"
Problemet är att när jag öppnar sidan står den bara o tuggar o tuggar till jag får script.timeout!?

sql´n

 SQL = "SELECT TOP 1 Threads.ThreadID, "
    SQL = SQL & "Replies.ReplyID, Replies.rDate, "
    SQL = SQL & "Users.userID, Users.uName "
    SQL = SQL & "FROM "
    SQL = SQL & "(((Forums "
    SQL = SQL & "INNER JOIN Threads "
    SQL = SQL & "ON Forums.ForumID = Threads.tForumID) "
    SQL = SQL & "INNER JOIN Replies "
    SQL = SQL & "ON Threads.ThreadID = Replies.rThreadID) "
    SQL = SQL & "INNER JOIN Users "
    SQL = SQL & "ON Replies.rUserID = Users.UserID) "
    SQL = SQL & "WHERE Forums.fGroupID = " & objRS("GroupID") & " "
    SQL = SQL & "ORDER BY Replies.rDate DESC"
    Set RS = Conn.Execute(SQL)

Med response.write får jag

SELECT TOP 1 Threads.ThreadID, Replies.ReplyID, Replies.rDate, Users.userID, Users.uName FROM (((Forums INNER JOIN Threads ON Forums.ForumID = Threads.tForumID) INNER JOIN Replies ON Threads.ThreadID = Replies.rThreadID) INNER JOIN Users ON Replies.rUserID = Users.UserID) WHERE Forums.fGroupID = 1 ORDER BY Replies.rDate DESC

Vad gör jag för fel?

yohpopsMedlem sedan feb. 20011 198 inlägg
#2

Prova att ta bort parenteserna runt joinarna, och ev. ändra asp scripttimeout.
Den brukar vara satt till 90 sek eller dylikt.

LarsGMedlem sedan dec. 200012 464 inlägg
#3

Parenteserna behövs om man använder access.

Indexering!

Dela upp frågan i mindre delar och se vad som tar tid.

jimpaMedlem sedan jan. 2001361 inlägg
#4

Nu har jag provat att tabort all joinarna utom en men det blir ingen skillnad?
Kolla den här sql

strSQL = "SELECT Groups.GroupID, Groups.gName, Groups.gActive, Groups.gOrder, Groups.gDescription, "
strSQL = strSQL & "(select Count(*) from Forums where fActive = true and fGroupID = Groups.GroupID) as cForum, "
strSQL = strSQL & "Forums.ForumID, "
strSQL = strSQL & "(select Count(Threads.ThreadID) from (Forums left join Threads on Forums.ForumID = Threads.tForumID) where Forums.fGroupID = Groups.GroupID) as cThread, "
strSQL = strSQL & "(select Count(Replies.ReplyID) from ((Forums left join Threads on Forums.ForumID = Threads.tForumID) left join Replies on Threads.ThreadID = Replies.rThreadID) where Forums.fGroupID = Groups.GroupID) as cReplies, "
[b]'strSQL = strSQL & "(select top 1 Replies.ReplyID from ((Forums inner join Threads on Forums.ForumID = Threads.tForumID) left join Replies on Threads.ThreadID = Replies.rThreadID) where Forums.fGroupID = Groups.GroupID order by Replies.rDate desc) as lastReplyID, "[/b]
strSQL = strSQL & "Threads.ThreadID, Threads.tUserID, Threads.tDate, "
strSQL = strSQL & "Users.UserID, Users.uName "
strSQL = strSQL & "FROM (((Groups "
strSQL = strSQL & "LEFT JOIN Forums "
strSQL = strSQL & "ON Groups.GroupID = Forums.fGroupID) "
strSQL = strSQL & "LEFT JOIN Threads "
strSQL = strSQL & "ON Forums.ForumID = Threads.tForumID) "
strSQL = strSQL & "LEFT JOIN Users "
strSQL = strSQL & "ON Threads.tUserID = Users.UserID) "
strSQL = strSQL & "WHERE Groups.gActive = true AND Forums.fActive = true "
strSQL = strSQL & "ORDER BY Groups.gOrder DESC, Threads.tDate DESC"
Set objRS = Conn.Execute(strSQL)

Den funkar om jag tarbort den fetmarkerade raden. Men med den försöker jag hämta "ReplyID" för den senaste posten i tabellen "Replies". Fattar inte vad som går fel?

Det jag helst skulle villja få fram med den är den senaste posten i tabellerna "Threads" eller "Replies" tillsammans med resp. user ID, User name. Som det är nu måste jag hämta den infomationen i själva loopen sedan med en separat sql-sats :( Men i detta fallet finns det väl inga alternativ(?)

Någon?

jimpaMedlem sedan jan. 2001361 inlägg
#5

Ingen som har något tipps?

danjelMedlem sedan juni 200443 inlägg
#6

"order by Replies.rDate desc"...
Är rDate bara datum eller datum och tid ? Då kan order by ta lååång tid..
Hur många rader är det?

jimpaMedlem sedan jan. 2001361 inlägg
#7

Det är datum och tid, men databasen är nästan tom så felet måste ligga någon annanstans!

254 ms totalt · 3 externa anrop · v20260731065814-full.30151723
129 ms — hämta forumlista (db)
123 ms — hämta statistik (db)
126 ms — hämta tråd, inlägg och bilagor (db)