webForumDet fria alternativet

Räkna svar på inlägg i forum

Databaser & SQL

11 svar · 424 visningar · startad av bigsky

Medlem sedan maj 2002821 inlägg
Frågan#1

Håller på med ett MYCKET enkelt forum. Jag vill räkna hur många svar det finns på varje inlägg som loopas ut. Allt ligger i samma tabell. Jag tänkte koppla ihop dem med "Id" och "ParentId" men vet inte hur jag ska skriva i SQL-frågan.

All info ska loopas ut med samma fråga som kollar hur många svar varje inlägg har.

Om posten Id = "42" har ParentId = "20" är post 42 alltså ett svar till post 20.

Medlem sedan maj 20031 472 inlägg
#2

Samma fråga som jag hade...

http://www.webforum.nu/showthread.php?s=&threadid=127007&forumid=53

Medlem sedan sep. 20026 425 inlägg
#3
SELECT a.Id,(SELECT count(parentId) FROM tabell b WHERE b.parentId=a.Id) as replies FROM tabell a
Medlem sedan maj 2002821 inlägg
#4

Alltid ska man krångla till det. Nu ser koden ut såhär:

Set rsShowTopics = ConnectToBoard.Execute("SELECT a.*, (SELECT Count(ParentId) FROM forum AS b WHERE b.ParentId = a.Id) AS strReplies FROM forum a WHERE a.ParentId = 0 ORDER BY a.PostedD, PostT")
If Not rsShowTopics.EOF Then arrRecSet = rsShowTopics.GetRows()

Men när jag vill skriva ut hur många svar det finns med strReplies skrivs IDet för posten ut istället.

Jag har använt arrRecSet(strReplies,i) för att försöka skriva ut antal svar.

Jag skulle även vilja göra så att den tråd som innehåller ett svar med det senaste datumet ska visas överst. Detta för att gamla trådar som fått ett nytt svar enkelt ska kunna besökas. Precis som det är här på wF. Hur ska jag sortera då i koden ovan?

Medlem sedan juni 200032 967 inlägg
#5

Vad innehåller din asp-variabel strReplies?
Får du ut rätt värde om du skriver ut direkt från recordsetet istället, utan att ta omvägen via getrows()?

Medlem sedan maj 2002821 inlägg
#6

strReplies ska innehålla antalet svar/poster där fältet ParentId har samma värde som en annan post i samma tabell (alltså själva inlägget).

Mer recordsetet blir det:

fel '80020009'
Undantag inträffade

Medlem sedan juni 200032 967 inlägg
#7

Jo, men asp-variabeln strReplies bör ju (iaf enligt din kod) innehålla ordningsnumret för fältet i SQL-frågan, eftersom du använder det i utskriften i getrows().

Kan du visa lite mer kod?

Medlem sedan maj 2002821 inlägg
#8

Men jag vill att det ska vara antalet svar som finns på inlägget, därav Count i SQL-frågan.

For i = intFirstPost To intLastPost
If arrRecSet(strReplies,i) = 1 Then
  strAnswers = arrRecSet(strReplies,i) & " reply"
Else
  strAnswers = arrRecSet(strReplies,i) & " replies"
End If
If arrRecSet(strReplies,i) >= 10 Then
  strLinkColor = "#990000"
ElseIf arrRecSet(strReplies,i) >= 5 Then
  strLinkColor = "#FF9900"
ElseIf arrRecSet(strReplies,i) >= 2 Then
  strLinkColor = "#339900"
Else
  strLinkColor = "#000000"
 End If
	
counter = counter + 1
If counter Mod 2 = 0 Then
  color = "#EEEEEE"
Else
  color = "#FFFFFF"
End If
Next
Medlem sedan juni 200032 967 inlägg
#9

Ja, men var sätter du variabeln strReplies som du använder här

If arrRecSet([b]strReplies[/b],i) = 1 Then

?

Där bör finnas en siffra, ordningsnumret på kolumnen du vill skriva ut. När du använder GetRows har ASP ingen aning om vad dina fält heter, det är en helt vanlig tvådimensionell array.

Alltså. Om det skapade fältet strReplies är nummer 5 i din selectlista, så är ordningsnumret 4 (då vi börjar på 0.) Då borde if-satsen se ut så här:

If Clng(arrRecSet(4, i)) = 1 Then
Medlem sedan maj 2002821 inlägg
#10

Det är andra fältet i tabellen, alltså nummer 1

Medlem sedan juni 200032 967 inlägg
#11

Dåså, ändra alla if-satser där du har arrRecSet(strReplies,i) till arrRecSet(1,i).

Mvh

Medlem sedan maj 2002821 inlägg
#12

Vänta nu, nu funkar det!

268 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
134 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
134 ms — ändringar (db)