webForumDet fria alternativet

sätta villkor

ASP

9 svar · 240 visningar · startad av Jörgen HP

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

Hej!

En kodsnutt jag fått hjälp med innan:


strSQL = "select IntForumId, ForumUse, ForumName, ForumModerator, Orgthread, " & _
"count(distinct Orgthread) as threads, " & _
"count(*) as posts, " & _
"max([Date]) as lastdate, ForumName " & _
"from b1180.Debatt inner join b1180.Forum " & _
"on Debatt.ForumId = Forum.IntForumId " & _
"group by ForumName"
strConn = "DSN=MySQL; SERVER=; DATABASE=; UID=; PWD="
Set objConn = Server.CreateObject("ADOdb.Connection")
objconn.Open strConn
arrForum = objConn.Execute(strSQL).GetRows()

Hade tänkt räkna orginalinlägg med raden count(distinct Orgthread) as threads Orginalinlägg har orgthread=0 och svar har orghtread=1.
Men den verkar räka 1:or ibland och 0:or ibland. Kan jag på något sätt säga:

count(distinct Orgthread) as threads where Orgthread=0

men raden ovan ger error, hur skriver jag?

mvh Jörgen

------------------
*** Var går gränsen mellan långa kortbyxor och korta långbyxor? ***

Medlem sedan juni 200032 967 inlägg
#2

är inte helt 100 på vad du är ute efter, men har du prövat att göra det med en subquery?

tror vi har diskuterat det, men är inte säker.

strSQL = "select IntForumId, ForumUse, ForumName, ForumModerator, Orgthread, " & _
" (select count(distinct Orgthread) as threads where Orgthread=0), " & _
...
...

mvh,

------------------
can i borrow your goat?

Medlem sedan feb. 20012 412 inlägg
#3

Hej!

Då får jag error:

SQLState: 42000
Native Error Code: 1064
[TCX][MyODBC]You have an error in your SQL syntax near 'select count(distinct Orgthread) as threads where Orgthread=0), count(*) as post' at line 1

/hundmagazine/forum/forum_default.asp, line 101

Rad 101:

arrForum = objConn.Execute(strSQL).GetRows()

Varför då då?
mvh Jörgen

------------------
*** Var går gränsen mellan långa kortbyxor och korta långbyxor? ***

Medlem sedan juni 200032 967 inlägg
#4

det kan finnas flera orsaker. en av dem: jag kan ha gjort fel, det händer. jag kan ju som bekant inte mysql.

jag kastar nog in handduken på just det här nu, tyvärr. :)

------------------
can i borrow your goat?

Medlem sedan dec. 200012 464 inlägg
#5

Mysql, har vissa begränsningar. Det där, till exemepel, är en konstruktion som dom inte tillåter.

Jag har svårt att se hur du ska få ihop det i en fråga. (Ja, jag vet att jag har petat på frågan tidigare.)

Du får nog lägga


select count(*) as posts from debatt
 where orgThread = 0

som en egen fråga.

------------------
essentitia preter non sans multiplicandum

Medlem sedan feb. 20012 412 inlägg
#6

Hej!

Eftersom jag bygger om forumet helt, jag jag lika bra slå på stort.

Hur lägger jag upp tabellstrukturen smartast så att det blir enkelt att räkna:

Antal inlägg totalt, antal inlägg/avdelning, trådar totalt, trådar/avdelning, antal svar/inlägg mm.

Min tabell struktur ser nu ut enligt följande:

#
# Tabell struktur för tabell 'Forum'
#

CREATE TABLE `Forum` (
`ForumId` tinyint(2) NOT NULL auto_increment,
`ForumUse` char(200) NOT NULL default '',
`ForumName` char(100) NOT NULL default '',
`ForumModerator` char(50) NOT NULL default '',
PRIMARY KEY (`IntForumId`)
) TYPE=MyISAM;

#
# Tabell struktur för tabell 'Debatt'
#

CREATE TABLE `Debatt` (
`MessId` int(11) NOT NULL auto_increment,
`Ip` varchar(30) default NULL,
`Subject` varchar(100) NOT NULL default '',
`Comment` text NOT NULL,
`Date` datetime default NULL,
`Replies` tinyint(3) default NULL,
`Orgthread` tinyint(1) default '1',
`View` smallint(14) default '0',
`AnvId` smallint(14) default NULL,
`ReplyId` int(11) default '0',
`ForumId` tinyint(2) default NULL,

PRIMARY KEY (`MessId`)
) TYPE=MyISAM;

Forumet är av denna typen och inte ett trådforum. Jag har olika avdelningar.

Hela Forumet handlar om hundar.

Sedan finns det n antal underavdelningar som är inriktade på vissa specialtyper, som tex tävling, tjänstehundar mm.

Mvh Jörgen

------------------
*** Var går gränsen mellan långa kortbyxor och korta långbyxor? ***

[Redigerat av jorgen den 14 aug 2001]

Medlem sedan feb. 20012 412 inlägg
#7

Hej igen...

Nu ser SQL frågorna ut så här:


strSQL ="SELECT IntForumId, ForumUse, ForumName, ForumModerator, " & _
"count(*) as Posts, " & _
"max([Date]) as lastdate, ForumName " & _
" FROM b1180.Forum " & _
"INNER JOIN b1180.Debatt ON b1180.Forum.IntForumId = b1180.Debatt.ForumId " & _
"GROUP BY ForumName"
Set RS = strConn.Execute(strSQL)

SQL ="SELECT COUNT(Orgthread) AS Threads FROM b1180.Debatt WHERE Orgthread=0 GROUP BY ForumId "
Set RS2 = strConn.Execute(SQL)

Den räknar rätt antal på både Treads och Posts i första avdelningen, med i de nästkommande forumavdelningarna räknar den fel på Threads.

Hela koden ser nu ut enligt nedan:

Varför vill den inte räkna rätt?
Har tom prövar lägga in SQL fråga 2 inuti loopen, men blev inte bättre.

mvh Jörgen

<%
strSQL ="SELECT IntForumId, ForumUse, ForumName, ForumModerator, " & _
"count(*) as Posts, " & _
"max([Date]) as lastdate, ForumName " & _
" FROM b1180.Forum " & _
"INNER JOIN b1180.Debatt ON b1180.Forum.IntForumId = b1180.Debatt.ForumId " & _
"GROUP BY ForumName"
Set RS = strConn.Execute(strSQL)

SQL ="SELECT COUNT(Orgthread) AS Threads FROM b1180.Debatt WHERE Orgthread=0 GROUP BY ForumId "
Set RS2 = strConn.Execute(SQL) 

%>

<table cellspacing="0" cellpadding="0" border="0" width="760" align="center"> 
<tr><td bgcolor="#778899"> 

<table border="0" cellspacing="1" cellpadding="6" width="760" align="center"> 
<tr>
<td width="4%">&nbsp;</td> 
<td width="40%"><p class="rubrik">Forum</p></td> 
<td width="6%" align="center"><p class="rubrik">Trådar</p></td>
<td width="6%" align="center"><p class="rubrik">Inlägg</p></td> 
<td width="17%" align="center"><p class="rubrik">Senaste inlägg</p></td> 
<td width="20%" align="center"><p class="rubrik">Debattledare</p></td>

</tr> 

<tr> 
<td colspan="6" bgcolor="#dededf"><p><b>Hundforum</b></p></td> 
</tr> 

<% Do while not RS.EOF %>

<tr> 

<td bgcolor="#dededf" align="center"><img src="ninlagg.gif" alt="Ikon"></td>
<td bgcolor="#eeeeee"><p>
<a href="default.asp?Forum=<%=RS("IntForumId")%>"><%=RS("ForumName")%></a>

<br><%=RS("ForumUse")%></p></td>

<td bgcolor="#dededf" align="center"><p><%=RS2("Threads")%></td>
<td bgcolor="#eeeeee" align="center"><p><%=RS("posts")%></td>
<td bgcolor="#dededf"><p><%=SweDateLong(RS("lastdate"))%></p></td>
<td bgcolor="#eeeeee"><p><b><%=RS("ForumModerator")%></b></p></td>
</tr> 

<%

RS.movenext
loop

%>

------------------
*** Var går gränsen mellan långa kortbyxor och korta långbyxor? ***

Medlem sedan mars 20002 836 inlägg
#8

Eftersom jag bygger om forumet helt, jag jag lika bra slå på stort.

Hur lägger jag upp tabellstrukturen smartast så att det blir enkelt att räkna:

Själv skulle jag nog bygga forumet med dessa tabeller

- Kategorier

- Forum

- Inlagg

- Svar

- Medlemmar

cya,
PatrikB

------------------
*så kan det gå när inte haspen är på*

Medlem sedan dec. 200012 464 inlägg
#9

När jag vaknade i morse så kom jag faktiskt på att Mysql har stöd för case (Jag är så van vid att dom inte följer standard ;) )

strSQL = "select IntForumId, ForumUse, ForumName, ForumModerator, Orgthread, " & _
"sum(case Orgthread when 0 then 1 else 0 end ) as threads, " & _
"count(*) as posts, " & _
"max([Date]) as lastdate, ForumName " & _
"from b1180.Debatt inner join b1180.Forum " & _
"on Debatt.ForumId = Forum.IntForumId " & _
"group by ForumName"

För övrigt så håller jag med PatrikB

------------------
essentitia preter non sans multiplicandum

Medlem sedan feb. 20012 412 inlägg
#10

Tackar och bockar!

Fördelen med den tabellstrukturen är att den är överskådlig samt lätt att hämta data ifrån.

Nackdelen är att en del uppgifter får förekomma i flera eller alla tabellerna.

Så frågan man kan ställa sig själv är:

Vad väljer man?

En något tyngre databas eller något svårare kodning. :)

mvh Jörgen

------------------
*** Var går gränsen mellan långa kortbyxor och korta långbyxor? ***

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