Avatar billede runskee Nybegynder
23. marts 2004 - 16:26 Der er 28 kommentarer og
1 løsning

Forum med brug af COUNT til at tælle besvarelser

jeg har et forum, hvor jeg gerne ville tælle svarene på hver enkelt besked. Min kode ser sådan ud:

'Åben en forbindelse til databasen
set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open(Server.Mappath("db.mdb"))

'opretter forbindelse til database og vælger poster der ikke er Svar
set forum = Server.CreateObject("ADODB.recordset")
forum.Open "SELECT * FROM job WHERE svarid = 0 ORDER BY Dato desc", conn


jeg vil gerne have klemt en COUNT ind, men kan ikke rigtig få det til at virke?

Noget lignende:
forum.Open "SELECT COUNT * FROM job WHERE svarid = 0 ORDER BY Dato desc", conn
(der mangler en operator får jeg at vide??)
Avatar billede fennec Nybegynder
23. marts 2004 - 16:32 #1
"SELECT count(*) as total, id, dato.....(alle dem du skal bruge) FROM job WHERE svarid = 0 group by id, dato....(alle dem du skal bruge) ORDER BY Dato desc"
Avatar billede runskee Nybegynder
23. marts 2004 - 16:58 #2
Sådan her?:

"SELECT count(*) as beskedid, svarid, Overskrift, Tekst, username, dato FROM job WHERE svarid = 0 group by beskedid, svarid, Overskrift, Tekst, username, dato ORDER BY Dato desc"

alle svar giver kun antallet 1 og alle beskedid'er (på links til beskeden) bliver sat til 1 også???
Avatar billede eagleeye Praktikant
23. marts 2004 - 17:02 #3
Hvis du vil havde det totale antal poster så kan du bruge:

forum.RecordCount

til at se hvor mange records der kom med ud
Avatar billede eagleeye Praktikant
23. marts 2004 - 17:11 #4
glemt mit første forslag..

Du skal havde JOIN'et svar tabellen på sådan alle svar bliver JOIN'et på tråden.:

"SELECT count(*) as antal, job.svarid, job.Overskrift, job.Tekst, job.username, job.dato FROM job LEFT JOIN job j2 ON job.id = j2.svarid WHERE job.svarid = 0 group by job.svarid, job.Overskrift, job.Tekst, job.username, job.dato ORDER BY job.Dato desc"
Avatar billede runskee Nybegynder
23. marts 2004 - 17:11 #5
forum.RecordCount giver bare en fejl??

Hvad har jeg gjort forkert i foregående kommentar siden at beskedid'en på mine links får værdien 1??
Avatar billede eagleeye Praktikant
23. marts 2004 - 17:21 #6
Fordi den bare tæller hoved tråden en gang. For at kunne tælle antal svar er man nød til at JOINe som jeg har vist det lige før.
Avatar billede eagleeye Praktikant
23. marts 2004 - 17:23 #7
ok, den jeg har vist forudsætter alle svar også ligger i job tabellen :)
Det har jeg antager som du har vist din SQL med svarid=0 ligner hoved beskeden og så alle svar har svarid=id på den man svarede på.
Avatar billede runskee Nybegynder
23. marts 2004 - 17:29 #8
Ja, svaren ligger også i jobtabellen. Derudover er jeg ikke helt sikker på hvad du mener? Svarid'ene er ikke den samme som ID'en
Avatar billede eagleeye Praktikant
23. marts 2004 - 17:30 #9
Hvordan holder du styr på hvile svar høre til hvilke "hovedtråde"?
Avatar billede runskee Nybegynder
23. marts 2004 - 17:36 #10
godt spørgsmål :-) Jeg mangler at bruge ID'en
Avatar billede eagleeye Praktikant
23. marts 2004 - 17:38 #11
Så jeg antog du brugte kolonnen svarid og hvis den er 0 så det en hovedtråd er den forskellig fra 0 indeholder den ID'et på den hovedtråd den er et svar til?
Avatar billede runskee Nybegynder
23. marts 2004 - 17:42 #12
jeg står lige med den ene fod ude af døren... jeg kommer tilbage senere i aften....
Avatar billede runskee Nybegynder
24. marts 2004 - 10:02 #13
Jeps, jeg fik det til at virke!!
Avatar billede runskee Nybegynder
24. marts 2004 - 17:04 #14
>eagleeye

kan du lægge et svar til point??

Jeg har dog stadig et problem - Antal svar giver 1 selvom der ingen svar er. Først når der er 2 svar tæller den 2. Kunne du hjælpe mig med det også, så smider jeg lidt mere i hatten?
Avatar billede eagleeye Praktikant
24. marts 2004 - 17:08 #15
Ok et svar :)

Prøv at lave count(*) as antal om til at den tæller id i "svar" tabellen:

count(j2.id) as antal

Så den bliver:

"SELECT count(j2.id) as antal, job.svarid, job.Overskrift, job.Tekst, job.username, job.dato FROM job LEFT JOIN job j2 ON job.id = j2.svarid WHERE job.svarid = 0 group by job.svarid, job.Overskrift, job.Tekst, job.username, job.dato ORDER BY job.Dato desc"
Avatar billede runskee Nybegynder
24. marts 2004 - 17:22 #16
Se det var bedre,

Jeg får dog en fejl på min "vis_indslag.asp" side når jeg vil vise beskeder der ikke har fået et svar tilknyttet. Da der ikke er nogen poster at vise vel?
Avatar billede eagleeye Praktikant
24. marts 2004 - 19:28 #17
Fejl?
Det måske fordi den ikke giver 0 men Null tilbage.
Avatar billede runskee Nybegynder
24. marts 2004 - 19:44 #18
Nej, der er ingen NULL'er kun 0'er.

jeg får beskeden:
"Enten er BOF eller EOF sand..... Den anmodede handling kræver en aktuel post"
Avatar billede eagleeye Praktikant
24. marts 2004 - 20:02 #19
Er det når du viser et indlæg og alle svar så ??
Avatar billede runskee Nybegynder
24. marts 2004 - 20:10 #20
Ja
Avatar billede eagleeye Praktikant
24. marts 2004 - 20:13 #21
Har du så ikke et loop som udskriver svarne eks:

sql = "select * from xxx where svarid=" & id
set rs = conn.execute(SQL)

do while not rs.EOF    '<--------------- har du sådan en linje, eller er det kun do?

..
..
loop
Avatar billede runskee Nybegynder
24. marts 2004 - 20:15 #22
den hedder:

Loop WHILE NOT forum.EOF
Avatar billede eagleeye Praktikant
24. marts 2004 - 20:20 #23
Du skal hvade flytte WHILE NOT forum.EOF op i linje med do

Så det bliver:

do WHILE NOT forum.EOF

  ..
  ..
loop


eller kommer den fejl når der ikke er nogle svar. Da do ... loop while xxx altid køres mindst en gang, hvorimod do while xx ... loop køres kun hvis nødvendigt.
Avatar billede runskee Nybegynder
24. marts 2004 - 20:54 #24
Det forstår jeg ikke. Det bliver ved med at give en uendelig løkke der ikke er til at stoppe igen.

og jeg bruger:

Do while not forum.EOF
..
..
loop

Conn.Close
Set Conn = Nothing
Avatar billede eagleeye Praktikant
24. marts 2004 - 20:56 #25
Du skal stadig hvad forum.Movenext lige før loop:


Do while not forum.EOF
..
..
  forum.Movenext
loop

Conn.Close
Set Conn = Nothing
Avatar billede runskee Nybegynder
24. marts 2004 - 20:59 #26
Ja, det er rigtigt!!

men det fører stadig til at mine beskeder med svar giver fejl:
"Enten er BOF eller EOF sand..... Den anmodede handling kræver en aktuel post"
Avatar billede eagleeye Praktikant
24. marts 2004 - 21:01 #27
hmm det lyder mærkeligt så. Så må der være noget andet som også hentes fra databasen men som den ikke kan finde?
Avatar billede runskee Nybegynder
24. marts 2004 - 21:06 #28
Ja, det VAR også mærkeligt.... jeg har fundet fejlen. Det var en forum("dato"), som stod uden for loop'et.

Mange tak for hjælpen. Jeg kvitterer med 100 p. Er det ok?
Avatar billede eagleeye Praktikant
24. marts 2004 - 21:08 #29
Ok, Ja det helt fint. :))
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