webForumDet fria alternativet

i Rs istället för 2 i loopen?

ASP

21 svar · 549 visningar · startad av Bosse168

Medlem sedan nov. 20031 018 inlägg
Frågan#1

När jag loopar ut mina forums inlägg så vill jag ha med hur många inlägg och hur många som skrivits idag. Nu undrar jag om man kan slippa att sätta så många RecSet.

Nuvarande kod:

Set Rs = Connect.Execute("SELECT * FROM forum ORDER BY diskusrubrik")

Do until Rs.eof

Set rsTotal = Connect.Execute("SELECT COUNT(*) AS Antal FROM forumpost Where diskusid = '"& Rs("diskusid") &"'")
Set rsCount = Connect.Execute("SELECT count(postid) AS Antal FROM forumpost WHERE diskusid = '"& rs("diskusid") &"' AND datum>'" & DateAdd("d",-1,Date()) & "'")
Medlem sedan feb. 200112 078 inlägg
#2
Set Rs = Connect.Execute("SELECT (SELECT COUNT(*) AS Antal FROM forumpost Where diskusid = '"& Rs("diskusid") &"') as TotalPosts, (SELECT count(postid) AS Antal FROM forumpost WHERE diskusid = '"& rs("diskusid") &"' AND datum>'" & DateAdd("d",-1,Date()) & "') As TodayPosts, * FROM forum ORDER BY diskusrubrik")

response.write rs("TotalPosts")
response.write rs("TodayPosts")
Medlem sedan nov. 20031 018 inlägg
#3

Hade missat en ) i slutet på ;)

Får detta fel mess nu:
Microsoft VBScript runtime error '800a000d'

Type mismatch: 'Rs'

Medlem sedan feb. 200112 078 inlägg
#4
Set rs = Connect.Execute("SELECT * FROM forum ORDER BY diskusrubrik")

Set rsInfo = Connect.Execute("SELECT (SELECT COUNT(*) AS Antal FROM forumpost Where diskusid = '"& Rs("diskusid") &"') as TotalPosts, (SELECT count(postid) AS Antal FROM forumpost WHERE diskusid = '"& rs("diskusid") &"' AND datum>'" & DateAdd("d",-1,Date()) & "') As TodayPosts, * FROM forum ORDER BY diskusrubrik"))

response.write rsInfo("TotalPosts")
response.write rsInfo("TodayPosts")

RED. Fel, citatet var aningen malplacerat.

Medlem sedan nov. 20031 018 inlägg
#5

Skulle man kunna baka in denna SQL sats i rsInfo?

Set Rs2 = Connect.Execute("SELECT * FROM forumpost WHERE diskusid='"& Rs("diskusid") &"' AND svarid=0 ORDER BY datum2 DESC LIMIT 5")
Medlem sedan nov. 20031 018 inlägg
#6

Får det här fel messet:

[TCX][MyODBC]You have an error in your SQL syntax near 'SELECT COUNT(*) AS Antal FROM forumpost Where diskusid = '4') as TotalPosts, (SE' at line 1

Medlem sedan feb. 200112 078 inlägg
#7

Jajamensan.

Set rsInfo = Connect.Execute("SELECT (SELECT COUNT(*) AS Antal FROM forumpost Where diskusid = '"& Rs("diskusid") &"') as TotalPosts, (SELECT count(postid) AS Antal FROM forumpost WHERE diskusid = '"& rs("diskusid") &"' AND datum>'" & DateAdd("d",-1,Date()) & "') As TodayPosts, * FROM forumpost WHERE diskusid='"& Rs("diskusid") &"' AND svarid=0 ORDER BY datum2 DESC LIMIT 5"))

Jag tror det där stämmer..

Medlem sedan feb. 200112 078 inlägg
#8

1. Är dina ID-fält verkligen av typen text? Det ser ut så, men är de det?
2. Hur ser SQL-satsen ut nu?

Medlem sedan nov. 20031 018 inlägg
#9

1.
postid int(11)
svarid int(11)
diskusid int(11)

2.

Set Rs = Connect.Execute("SELECT * FROM forum ORDER BY diskusrubrik")

Do until Rs.eof

Set rsInfo = Connect.Execute("SELECT (SELECT COUNT(*) AS Antal FROM forumpost Where diskusid = '"& Rs("diskusid") &"') as TotalPosts, (SELECT count(postid) AS Antal FROM forumpost WHERE diskusid = '"& rs("diskusid") &"' AND datum>'" & DateAdd("d",-1,Date()) & "') As TodayPosts, * FROM forumpost WHERE diskusid='"& Rs("diskusid") &"' AND svarid=0 ORDER BY datum2 DESC LIMIT 5")
Medlem sedan nov. 20031 018 inlägg
#10

Får detta fel mess:
Microsoft OLE DB Provider for ODBC Drivers error '80040e09'

[TCX][MyODBC]You have an error in your SQL syntax near 'SELECT COUNT(*) AS Antal FROM forumpost Where diskusid = '4') as TotalPoster, (S' at line 1

Medlem sedan juni 200032 967 inlägg
#11

MySQL i versioner lägre än 4.1 stödjer inte subqueries.

Man kan säkerligen skriva liknande frågor för lägre versioner, läs mer här.

mvh

Medlem sedan nov. 20031 018 inlägg
#12

Så det går alltså inte att få ihop dessa två Rs i samma?

Set rsTotal = Connect.Execute("SELECT COUNT(*) AS Antal FROM forumpost Where diskusid = '"& Rs("diskusid") &"'")
Set rsCount = Connect.Execute("SELECT count(postid) AS Antal FROM forumpost WHERE diskusid = '"& rs("diskusid") &"' AND datum>'" & DateAdd("d",-1,Date()) & "'")
Medlem sedan juni 200032 967 inlägg
#13

Jo, de borde gå att få ihop genom att använda UNION.

Set rsTotal = Connect.Execute("SELECT COUNT(*) AS Antal, 'Totalt' As Något FROM forumpost Where diskusid = '"& Rs("diskusid") &"' UNION SELECT count(postid), 'Postantal' FROM forumpost WHERE diskusid = '"& rs("diskusid") &"' AND datum>'" & DateAdd("d",-1,Date()) & "'")

Du borde få ett recordset som ser ut så här:

Antal    Något
------------------------
123      Totalt
99       Postantal

Mvh

Medlem sedan nov. 20031 018 inlägg
#14

Hur får jag ut antalet och dagens?

Medlem sedan juni 200032 967 inlägg
#15

Du loopar igenom recordsetet och skriver ut värdena?

Medlem sedan nov. 20031 018 inlägg
#16

Får detta fel mess:

Microsoft OLE DB Provider for ODBC Drivers error '80040e09'

[TCX][MyODBC]You have an error in your SQL syntax near 'UNION SELECT count(postid), 'Postantal' FROM forumpost WHERE diskusid = '4' AND ' at line 1

Medlem sedan juni 200032 967 inlägg
#17

Hmm. Det visar sig att UNION introducerades i version 4 av MySQL. Vilken version använder du? Har du möjlighet att uppgradera?

Medlem sedan nov. 20031 018 inlägg
#18

Just nu använder jag 3.xx men det finns möjlighet att uppgradera till MySQL 4.0.16

Medlem sedan nov. 20031 018 inlägg
#19

Är det stor skillnad mellan 3.xx och 4.xx?

Medlem sedan juni 200032 967 inlägg
#20

Säkert. Bara av det vi märkt i den här tråden är det tillräckligt stor skillnad för att motivera en uppgradering.

254 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)