Hej! Posta in din select som nästan funkar, och skriv hur den skall funka, så kan vi ändra på din kod... Så här ser den enkal select-saten ut.. Ja, det har jag,, Forum_Data innehåller drygt 200 tusen poster, om det kan vara av intresse. Här är några tips på hur du kan optimera prestanda: SELECT * JAg har tolkat det som att det skall vara max tio från varje forum.Sumrera forum, i en select-sats..?
Jag har en tabell som innehåller alla olika forum, denna tabell heter "Forum"
Sen har jag en tabell som innehåller alla inlägg "Forum_Data"
Jag vill slippa göra en select/forum
Det ska gärna se hur som det gör här på Pellesoft
T.ex:
Allmänt
* tråd 1, datum. osv...
* tråd 2, datum. osv...
Offtopic
* tråd 1, datum. osv..
Jag vill göra en select mot "Forum" och sen ska Top10 selectas från "Forum_Data" (sorterade efter datum DESC)
Men hur gör jag det.... Jag har testat lite med LEFT JOIN vilket funkar bra, men hur sätter jag TOP 10
på LEFT JOIN-tabellen ??
Tacksam för svar...
Har ni andra tips är dom självklart också välkomna... ;)
M.v.h.
Johan.NETSv: Sumrera forum, i en select-sats..?
/mickeSv:Sumrera forum, i en select-sats..?
SELECT * FROM Forum F LEFT JOIN Forum_Data FD ON FD.ForumID = F.ID ORDER BY FD.LastDate DESC
Men i denna sats, hämtas ju ALLA poster Forum_Data, jag vill att bara t.ex TOP 10 hämtas från Forum_Data
Jag har provat detta:
SELECT * FROM Forum F LEFT JOIN Forum_Data FD ON FD.ForumID = F.ID WHERE FD.ID IN(SELECT TOp 10 ID FROM Forum_Data WHERE ForumID = F.ID ORDER BY LastDate DESC) ORDER BY FD.LastDate DESC
Men detta tar lååång tid att köra... jag vill ju att select-saten ska gå fort också ;)
M.v.h.
Johan.NETSv:Sumrera forum, i en select-sats..?
Hur fort bör det gå ?
Kom gärna med exempel på hur man kan optimera selectsaten, eller göra på annat vis...
M.v.h.
JohanSv: Sumrera forum, i en select-sats..?
* Använd vyer/sparade frågor
* Öppna recordeset forward only read only
* Använd variabler för fält
* Använd Command objektet
* Ordentlig HTML kod med CSS som kan börja renderas innan sidan är helt nedladdad
Detta är ett exempel:
<%
Dim Connection 'As ADODB.Connection
Dim rsForums 'As ADODB.Recordset
Dim cmdThreads 'As ADODB.Command
Const adCmdStoredProc = 4
Const adOpenForwardOnly = 0
Const adLockReadOnly = 1
Const adCmdTable = 2
Set Connection = CreateObject("ADODB.Connection")
Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" + _
"Persist Security Info=False;" + _
"Data Source=" & Server.MapPath(ForumDB.mdb) & ";"
Set cmdThreads = CreateObject("ADODB.Command")
Set cmdThreads.ActiveConnection = Connection
cmdThreads.CommandText = "qrySelectThreadsTop10ByForum"
cmdThreads.CommandType = adCmdStoredProc
cmdThreads.Parameters.Append cmdThreads.CreateParameter("ForumId", adInteger, adParamInput)
cmdThreads.Prepared = True
Set rsForums = CreateObject("ADODB.Recordset")
rsForums.Open "qrySelectForums", Connection, adOpenForwardOnly, adLockReadOnly, adCmdTable
WriteForums rsForums, _
rsForums("ForumId"), _
rsForums("ForumName"), _
cmdThreads, _
cmdThreads("ForumId")
rsForums.Close
Connection.Close
End Sub
Private Sub WriteForums(rsForums, fldForumId, fldForumName, cmdThreads, pForumId)
Dim rsThreads 'As ADODB.Recordset
Response.Write "<table>"
Set rsThreads = CreateObject("ADODB.Recordset")
Do Until rsForums.EOF
Response.Write "<tr>"
Response.Write "<td colspan=""3"">"
Response.Write ""
Response.Write Server.HTMLEncode(fldForumName.Value)
Response.Write ""
Response.Write "</td>"
Response.Write "</tr>"
pForumId.Value = fldForumId.Value
rsThreads.Open cmdThreads, , adOpenForwardOnly, adLockReadOnly
WriteThreads rsThreads, _
rsThreads("ThreadId"), _
rsThreads("ThreadCreated"), _
rsThreads("ThreadSubject")
rsThreads.Close
rsForums.MoveNext
Loop
Response.Write "</table>"
End Sub
Private Sub WriteThreads(rsThreads, fldThreadId, fldThreadCreated, fldThreadSubject)
Do Until rsThreads.EOF
Response.Write "<tr>"
Response.Write "<td></td>"
Response.Write "<td>"
Response.Write FormatDateTime(fldThreadCreated.Value, vbShortDate)
Response.Write "</td>"
Response.Write "<td>"
Response.Write ""
Response.Write Server.HTMLEncode(fldThreadSubject.Value)
Response.Write ""
Response.Write "</td>"
Response.Write "</tr>"
rsThreads.MoveNext
Loop
End Sub
%>
Sv: Sumrera forum, i en select-sats..?
FROM Forum F
LEFT OUTER JOIN
(SELECT TOP 10 * FROM Forum_Data ORDER BY LastDate) FD
ON FD.ForumID = F.ID
ORDER BY FD.LastDate DESC
/mickeSv:Sumrera forum, i en select-sats..?
Mikael, din SQL ger tomma forum om det första innehåller tio st.