ASP 頁面遍歷記錄集,需在迴圈外顯示 Score 總和(變數 news)。
<%
sql = "SELECT * FROM Accounts.dbo.view_2 WHERE IsAndroid = 0"
Set rs = Conn.Execute(sql)
news = 0 ' 初始化累加變數
If Not rs.EOF Then
Do While Not rs.EOF
userid = rs("USERID")
Set rxsum = Conn.Execute("SELECT SUM(Score) FROM Accounts.dbo.View_3 WHERE userid=" & userid)
score = rxsum(0)
news = news + score ' 累加
%>
<td><%=userid%></td>
<td><%=rs("ACCOUNTS")%></td>
<td><%=score%></td>
<%
rs.MoveNext
Loop
End If
%>
<td><%=news%></td> <!-- 迴圈外顯示總計 -->
news = 0 在迴圈前初始化。news = news + score 在迴圈內累加。<%=news%> 放在迴圈後(表格尾行),而非每行重複顯示。當前每行執行一條子查詢(N+1 問題)。建議改用單條 JOIN 查詢:
sql = "SELECT v2.USERID, v2.ACCOUNTS, ISNULL(SUM(v3.Score),0) AS TotalScore " & _
"FROM Accounts.dbo.view_2 v2 " & _
"LEFT JOIN Accounts.dbo.View_3 v3 ON v2.USERID = v3.userid " & _
"WHERE v2.IsAndroid = 0 " & _
"GROUP BY v2.USERID, v2.ACCOUNTS"
一次查詢獲取所有資料與總分,消除迴圈查詢,效能提升數量級。