Avatar billede fomse Nybegynder
27. november 2003 - 13:29 Der er 24 kommentarer og
1 løsning

Antal svar på forum post

Jeg har følgende:

<%
'TOP 5 POSTER I FORUM STARTER HER
' DSNLess forbindelse til databasen
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("Forum/forum.mdb")

Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open strDSN

SQL = "SELECT TOP 5 Emne as Antal FROM Messages Where SvarID = 0 Order by Dato DESC"

'for at udskrive antallet kan du bruger dit recordset (rs) rs("antal"):
set rs = myConn.execute(SQL)

do while not rs.EOF
  Response.write "- <font color='#0000FF'>" & rs("antal") & "</font><br>"
  rs.movenext
loop

' Rydder op efter os
myConn.Close
Set myConn = Nothing
'COUNT PÅ POSTER I FORUM SLUTTER HER
%>

Nu vil jeg gerne nedenunder hver af top 5 have antallet af svar stående! Hvordan gør jeg det?

I databasen har hver hovedindlæg et ID og svar dertil har et SvarID som er magen til...
Avatar billede thomas_yde Nybegynder
27. november 2003 - 13:56 #1
Nu ved jeg ikke hvordan du har bygget din database op men du har vel et id nummer til et indlæg og en id til dine svar med en tilknytning til indlæg.

Så kan du tælle antal svar med en count(*) hvor svarid's indlægsid passer til dit aktuelle indlæg
fx.
indlægid = postId
svarid = anwId
svar_ind = refId

Select Count(*) as answers from [tabelnavn] where postId = refId
Det tal du får ud er dine svar.
Avatar billede chriscross Nybegynder
27. november 2003 - 13:58 #2
Jeg går ud fra at det er fra samme tabel ?
Prøv:
SELECT TOP 5 Emne as Antal,(select count(svarid) from Messages where Messages.id= Messages.svarid) as AntalSvar
FROM Messages 
Where SvarID = 0 Order by Dato DESC

- og så skal du jo nok rette din where-klausul til da den siger svarid =0
Avatar billede fomse Nybegynder
27. november 2003 - 14:58 #3
Hvordan laver jeg så to RS?
Altså:

do while not rs.EOF
  Response.write "- <font color='#0000FF'>" & rs("antal") & "--" & rs("svar")&"</font><br>"
  rs.movenext
loop

Eller....
Avatar billede chriscross Nybegynder
27. november 2003 - 15:01 #4
Ved ikke helt hvad du menre, men hvis det er mit indlæg du svarer på så hedder den du har haft hele tiden rs("antal"), og den jeg har tilføjet rs("AntalSvar"), og du hiver dem bare ud som du selv lige har skrevet
Avatar billede fomse Nybegynder
28. november 2003 - 10:49 #5
chriscross>> Kan simpelthen ikke få det til at virke:

Vil gerne ha den skriver:
INDLÆG - ANTILSVAR

Er det muligt at jeg kunne emaile det til dig, så du kunne se på det?

Fomse:-)
Avatar billede chriscross Nybegynder
28. november 2003 - 10:53 #6
Lad os lige prøve uden først - det er alligevel svært uden databasen ;-)

Kunne du ikke kopiere den sql du har lige nu ind her sammen med din udskrivning.
Og så: hvad præcist er det der ikke virker - kommer der fejl eller står det forkert eller kommer der intet ud ?
Avatar billede fomse Nybegynder
28. november 2003 - 11:06 #7
SGL'en samt udskrivning:

<%
'TOP 5 POSTER I FORUM STARTER HER
' DSNLess forbindelse til databasen
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("Forum/forum.mdb")

Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open strDSN

'SQL = "SELECT TOP 5 Emne as Antal FROM Messages Where SvarID = 0 Order by Dato DESC"
SQL = "SELECT TOP 5 Emne as Antal,(SELECT Count(SvarID) FROM Messages where Messages.ID= Messages.SvarID) as AntalSvar FROM Messages Where SvarID = 0 Order by Dato DESC"

'for at udskrive antallet kan du bruger dit recordset (rs) rs("antal"):
set rs = myConn.execute(SQL)

do while not rs.EOF
  Response.write "- <font color='#0000FF'>" & rs("antal") & "</font>- " & rs("AntalSvar") & "<br>"
  rs.movenext
loop

' Rydder op efter os
myConn.Close
Set myConn = Nothing
'COUNT PÅ POSTER I FORUM SLUTTER HER
%>

FEJL:
Den skriver 0 ud for hver.

Se det på http://www.fomsgaard.com/ccc
Avatar billede fomse Nybegynder
28. november 2003 - 11:10 #8
Avatar billede chriscross Nybegynder
28. november 2003 - 11:12 #9
Det var dejligt - meget lettere :o)

Du spørger også stadig på de poster hvor SvarID = 0, så den gør faktisk det rigtige ;-)

Prøv at fjern: "where SvarID = 0" fra din sql
Avatar billede fomse Nybegynder
28. november 2003 - 11:14 #10
Skriver stadig 0!! Fatter det ikke....
Avatar billede fomse Nybegynder
28. november 2003 - 11:15 #11
Og viser ikke de rigtige indlæg....
Avatar billede chriscross Nybegynder
28. november 2003 - 11:17 #12
Hvordan ser sql ud nu ?
Avatar billede fomse Nybegynder
28. november 2003 - 11:20 #13
SQL = "SELECT TOP 5 Emne as Antal,(SELECT Count(SvarID) FROM Messages where Messages.ID= Messages.SvarID) as AntalSvar FROM Messages Order by Dato DESC"
Avatar billede chriscross Nybegynder
28. november 2003 - 11:25 #14
Ret det lige til:
SQL = "SELECT TOP 5 Dato, Emne as Antal,(SELECT Count(SvarID) FROM Messages where Messages.ID= Messages.SvarID) as AntalSvar FROM Messages Order by Dato DESC"

- og se hvordan det så ser ud
Avatar billede chriscross Nybegynder
28. november 2003 - 11:25 #15
Det er jo de fem seneste datoer du vil have ud, ikke?
Avatar billede fomse Nybegynder
28. november 2003 - 11:29 #16
Jo det fem seneste poster + ved siden af skal der stå de antal svar der er pr. post....
Avatar billede fomse Nybegynder
28. november 2003 - 11:29 #17
Virker stadig ikke:
Skriver 0 og ikke de rigtige poster....
Avatar billede chriscross Nybegynder
28. november 2003 - 11:33 #18
Hmm, ser det ikke ud som om den vælger de fem seneste indlæg uanset om de er *i familie* med hinanden eller ej ?

- du skulle vel kun have det første indlæg i hver tråd...har du et felt der indikerer om et indlæg er det første...
Avatar billede fomse Nybegynder
28. november 2003 - 11:41 #19
Den skal vise de 5 første hovedtråde og ud for hver det antal svar der er på tråden..

Et hovedindlæg har altid SvarID=0 og derudover et unikt ID
Svar på tråden har altid SvarID=trådens unikke ID
Og så er der naturligvis dato på dem alle
Avatar billede chriscross Nybegynder
28. november 2003 - 11:50 #20
Du har altså et felt med to funktioner og det er ikke smart når vi nu skal bruge netop de to i samme sætning:
Prøv:

SQL = "SELECT TOP 5 Emne as Antal,(SELECT Count(SvarID) FROM Messages where Messages.ID= Messages.SvarID and Messages.SvarID <> 0) as AntalSvar FROM Messages Where SvarID = 0 Order by Dato DESC"

Ellers tror jeg du er nødt til at hente din top 5 ud for sig selv og derefter lave en ny sql hvor hu så henter count... ( men det er grimt at have et recordset der åbnes og lukkes i en løkke fra et andet recordset - det kan risikere at trække tænder...
Avatar billede fomse Nybegynder
28. november 2003 - 12:01 #21
Hmm den skriver stadig 0 svar!

Jeg kan ikke ændre databasen! Det er ikke mig der har lavet forummet, men kan godt se hvad du mener!!
Hvordan løser jeg det så?
Avatar billede chriscross Nybegynder
28. november 2003 - 12:44 #22
Det irriterer mig nu at det ikke kan blive i én sql - men hvis det kun er de fem øverste går det nok men to.
Prøv:
SQL = "SELECT TOP 5 Emne as Antal,ID FROM Messages Where SvarID = 0 Order by Dato DESC"
'for at udskrive antallet kan du bruger dit recordset (rs) rs("antal"):
set rs = myConn.execute(SQL)
do while not rs.EOF
  ' ny sql for at finde antal
  SQL="Select count(SvarID) as antalSvar from Messages Where ID = "&rs("ID")
  set rsTmp = myConn.execute(SQL)
  ' indlæs antal i variabel
  If Not rsTmp.EOF Then
    antalsvar = rsTmp("AntalSvar")
  Else
    antalsvar = 0
  End If
  rsTmp.Close
  Set rsTmp = Nothing
  Response.write "- <font color='#0000FF'>" & rs("antal") & "</font>- " & antalsvar & "<br>"
  rs.movenext
loop
Avatar billede fomse Nybegynder
28. november 2003 - 13:09 #23
Kanon!! Der var den:-) Takker
Avatar billede chriscross Nybegynder
28. november 2003 - 13:27 #24
Selv tak

- og så må du da gerne acceptere mit svar ;-)
Avatar billede fomse Nybegynder
29. november 2003 - 15:24 #25
Sorry:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester