webForumDet fria alternativet
Logga in / Bli medlem

For each...

Databaser & SQL

7 svar · 217 visningar · startad av Jörgen HP

Medlem sedan feb. 20012 412 inlägg
Frågan#1

Hej!

Oj, det blev ju flera frågor ikväll. Jag ska försöka förklara mitt beskymmer.

Jag har lite adminfunktioner till mitt forum. När jag har raderat, flyttat så vill jag räkna om hur många trådar det finns i varje forumavdelning.

Jag har 3 tabeller:

Categorier:
Innehåller samtliga forumavdelningar

Inlagg:
Innehåller alla orginalmeddelande

Svar:
Innehåller alla svar

Nu vill jag loopa igenom tabellen Categorier och för varje categoriId räkna antal inlägg i tabellen Inlagg som har just det categoriId. Samt uppdatera med rätt antal Inlagg i tabellen Categorier.

jag satt och pulade men fick inte rätt på det:

strSQL = "SELECT IntForumId FROM Categorier ORDER BY IntForumId"
arrPoster = objConn.Execute(strSQL).GetRows()

For each IntForumId In arrPoster

IntForumId = arrPoster(0)

sql ="SELECT COUNT DISTINCT(IntForumId) AS Antal FROM Inlagg WHERE IntForumId = "&IntForumId&""
SET RS = objConn.Execute(sql)

sql ="UPDATE Categorier SET ForumThreads = "& RS("Antal") &" WHERE IntForumId = "&IntForumId&""
objConn.Execute sql,,128

Next

Tacksam för vägledning :)

Mvh Jörgen

Medlem sedan juni 20019 024 inlägg
#2
strSQL = "SELECT IntForumId FROM Categoreier ORDER BY IntForumId"
arrPoster = objConn.Execute(strSQL).GetRows()

[b]For IntForumId = 0 To UBound(arrPoster, 2)[/b]

IntForumId = [b]arrPoster(0, intForumID)[/b]

sql ="SELECT COUNT DISTINCT(IntForumId) AS Antal FROM Inlagg WHERE IntForumId = "&IntForumId&""
SET RS = objConn.Execute(sql)

sql ="UPDATE Categorier SET ForumThreads = "& RS("Antal") WHERE IntForumId = "&IntForumId&""
objConn.Execute sql,,128

Next

SQL satsen SELECT COUNT DIST... är jag inte riktigt säker på... vi får vänta på LarsG! ;)

Medlem sedan feb. 20012 412 inlägg
#3

Hej!

Har kommit så här långt, den räknar och ger ut en siffra bara:


strSQL = "SELECT IntForumId FROM Categorier ORDER BY IntForumId"
arrPoster = objConn.Execute(strSQL).GetRows()

For IntForumId = 0 To UBound(arrPoster, 2)

IntForumId = arrPoster(0, intForumID)

sql ="SELECT COUNT(*) AS Antal FROM Inlagg WHERE IntForumId = "&IntForumId&""
SET RS = objConn.Execute(sql)

Response.Write "Antal "& RS("Antal") &" "

sql ="UPDATE Categorier SET ForumThreads = "& RS("Antal") &" WHERE IntForumId = "&IntForumId&""
objConn.Execute sql,,128

Next

Skriver ut:

Antal 2

Tips någon?

mvh Jörgen :)

Medlem sedan juni 200032 967 inlägg
#4

Vad är det som inte fungerar nu alltså?

Mvh,

Medlem sedan feb. 20012 412 inlägg
#5

Hej!

Den borde skriva ut:

Antal 2
Antal 3

Sedan sker det ingen update alls, men jag får inget felmess heller.

mvh Jörgen :)

Medlem sedan juni 200032 967 inlägg
#6

Ah!

Du använder variabeln intForumID lite galet, dels som kontrollvariabel i din loop, men också som något helt annat.

For [b]IntForumId[/b] = 0 To UBound(arrPoster, 2)

[b]IntForumId[/b] = arrPoster(0, intForumID)

Byt namn på den ena är mitt förslag. :)

Mvh,

Medlem sedan feb. 20012 412 inlägg
#7

Hej!

Nu ser den ut enligt följande. Då räknar den båda, men uppdaterar bara första forumet.

<%

Set objDB = GetDBConn()

strSQL = "SELECT IntForumId FROM Categorier ORDER BY IntForumId"
arrPoster = objDB.Execute(strSQL).GetRows()

For I = 0 To UBound(arrPoster, 2)

I = arrPoster(0,I)

sql ="SELECT COUNT(*) AS Antal FROM Inlagg WHERE IntForumId = "&IntForumId&" OR Flyttat = "&IntForumId&""
SET RS = objDB.Execute(sql)

Response.Write "Antal "& RS("Antal") &" <br>"

sql ="UPDATE Categorier SET ForumThreads = "& RS("Antal") &" WHERE IntForumId = "&IntForumId&""
objDB.Execute sql,,128

Next
%>

mvh Jörgen :)

Medlem sedan feb. 20012 412 inlägg
#8

Hej!

Den slutliga och fungerande versionen blev: (tack @nders och tack Pace!)

strSQL = "SELECT IntForumId FROM Categorier ORDER BY IntForumId"
arrPoster = objDB.Execute(strSQL).GetRows()

For I = 0 To UBound(arrPoster, 2)

Id = arrPoster(0,I)

sql ="SELECT COUNT(*) AS Antal FROM Inlagg WHERE IntForumId = "&Id&" OR Flyttat = "&Id&""
SET RS = objDB.Execute(sql)

Response.Write "Antal "& RS("Antal") &" <br>"

sql ="UPDATE Categorier SET ForumThreads = "& RS("Antal") &" WHERE IntForumId = "&Id
objDB.Execute sql,,128

Next

Mvh Jörgen :)

394 ms totalt · 4 externa anrop · v20260731065814-full.5386d3bf
130 ms — deklarationer (db)
131 ms — hämta statistik (db)
131 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)