Avatar billede steen_hansen Forsker
11. juni 2002 - 13:53 Der er 12 kommentarer og
3 løsninger

Tælle poster, som machter - SQL-spørgsmål

Jeg vil gerne tælle antale besvarelser på et indlæg sammen. Jeg skal have talt de poster sammen, hvor post_parent matcher emneID. Har emneID tallet "1", skal jeg have talt alle de poster i post_parent sammen, som har tallet "1".

Jeg lavede en forespørgsel i Access og så hvad SQL-sætningen blev (ved ikke om det er rigtigt):

SELECT First([post_parent]) AS [post_parent Felt], Count([post_parent]) AS Antal
FROM debat
GROUP BY [post_parent]
HAVING Count([post_parent])>1;

Det har jeg prøvet at omsætte i ASP, men uden held. HJÆLP:

<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath ("/fpdb/include.mdb")
Conn.Open DSN

strSQL = "Select Count(post_parent) AS amount FROM debat"
set rs = Conn.Execute(strSQL)

response.write "Der er " & rs("amount") & " besvarelser."
%>
Avatar billede -master-d- Nybegynder
11. juni 2002 - 14:04 #1
Måske noget lignende det her...

strSQL = "Select Count(post_parent) AS amount FROM debat Where post_parent = '" & emneID & "'"
Set rs = Conn.Execute(strSQL)

Det der mangler er den lille del som siger at post_parent skal være det samme som emneID(emneID er her skrevet som en variabel du kan selv ændre det hvis du har lyst)
Avatar billede jeg_var_gangsta Nybegynder
11. juni 2002 - 14:06 #2
EmneID = request("EmneID")
strSQL = "Select Count(post_parent) AS amount FROM debat WHERE post_parent = "&EmneID&""
Avatar billede jeg_var_gangsta Nybegynder
11. juni 2002 - 14:07 #3
-master-d- > du mangler at slette ' når du henter EmneID ind i SQL strengen. Hvis feltet er et heltal skal der ikke være apostroffer...

/Gangsta
Avatar billede steen_hansen Forsker
11. juni 2002 - 14:11 #4
Hej igen, master-d!

Jeg har forøvrigt dette stående i forvejen, hvordan skal det flettes ind?:

<%
Set Conn = Server.CreateObject("ADODB.Connection")
dbConn = "SERVER=Local;DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("/fpdb/include.mdb")
Conn.open dbConn

SQL = "SELECT TOP 25 * FROM debat WHERE post_parent = 0 ORDER BY emneID DESC"
Set RS = Conn.Execute( SQL )

strSQL = "Select Count(post_parent) AS amount FROM debat Where post_parent = '" & emneID & "'"
Set rs = Conn.Execute(strSQL)

    response.write "<tr><td valign=""top"" width=""50%""><span class=""tekst11""><b>" & "Emne" & "</b></span></td>"
    response.write "<td valign=""top"" width=""10%""><span class=""tekst11""><b><p align=""center"">" & "Bsv" & "</p></b></span></td>"
    response.write "<td valign=""top"" width=""20%""><span class=""tekst11""><b>" & "Oprettet" & "</b></span></td>"
    response.write "<td valign=""top"" width=""20%""><span class=""tekst11""><b>" & "Besvaret" & "</b></span></td></tr>"

while NOT RS.EOF
    tidspunkt = addZ(day(RS("tid"))) & "-" & addZ(month(RS("tid"))) & "-" & year(RS("tid")) & " " & addZ(hour(RS("tid"))) & ":" & addZ(minute(RS("tid")))

    response.write "<tr><td valign=""top"" width=""50%""><span class=""tekst11""><a href=""/members/debat/debatemne.asp?emneID=" & RS("emneID") & """>" & RS("emne") & "</a></span></td>"
    response.write "<td valign=""top"" width=""10%""><span class=""tekst11""><p align=""center"">" & rs("amount") & "</p></span></td>"
    response.write "<td valign=""top"" width=""20%""><span class=""tekst11""><nobr>" & tidspunkt & "</nobr></span></td>"
    response.write "<td valign=""top"" width=""20%""><span class=""tekst11""><nobr>" & tidspunkt & "</nobr></span></td></tr>"
   
    RS.MoveNext
    text=""
wend

RS.Close
Set RS = nothing
Conn.Close
Set Conn = nothing
%>
Avatar billede -master-d- Nybegynder
11. juni 2002 - 14:15 #5
Virker det ikke eller hvad?
Avatar billede steen_hansen Forsker
11. juni 2002 - 14:17 #6
Nej, det gør det ikke. Jeg har prøvet at rette lidt:

<%
Set Conn = Server.CreateObject("ADODB.Connection")
dbConn = "SERVER=Local;DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("/fpdb/include.mdb")
Conn.open dbConn

SQL = "SELECT TOP 25 * FROM debat WHERE post_parent = 0 ORDER BY emneID DESC"
strSQL = "SELECT COUNT(post_parent) AS amount FROM debat Where post_parent = '" & emneID & "'"
Set RS = Conn.Execute( SQL )

    response.write "<tr><td valign=""top"" width=""50%""><span class=""tekst11""><b>" & "Emne" & "</b></span></td>"
    response.write "<td valign=""top"" width=""10%""><span class=""tekst11""><b><p align=""center"">" & "Bsv" & "</p></b></span></td>"
    response.write "<td valign=""top"" width=""20%""><span class=""tekst11""><b>" & "Oprettet" & "</b></span></td>"
    response.write "<td valign=""top"" width=""20%""><span class=""tekst11""><b>" & "Besvaret" & "</b></span></td></tr>"

while NOT RS.EOF
    tidspunkt = addZ(day(RS("tid"))) & "-" & addZ(month(RS("tid"))) & "-" & year(RS("tid")) & " " & addZ(hour(RS("tid"))) & ":" & addZ(minute(RS("tid")))

    response.write "<tr><td valign=""top"" width=""50%""><span class=""tekst11""><a href=""/members/debat/debatemne.asp?emneID=" & RS("emneID") & """>" & RS("emne") & "</a></span></td>"
    response.write "<td valign=""top"" width=""10%""><span class=""tekst11""><p align=""center"">" & rs("amount") & "</p></span></td>"
    response.write "<td valign=""top"" width=""20%""><span class=""tekst11""><nobr>" & tidspunkt & "</nobr></span></td>"
    response.write "<td valign=""top"" width=""20%""><span class=""tekst11""><nobr>" & tidspunkt & "</nobr></span></td></tr>"
   
    RS.MoveNext
    text=""
wend

RS.Close
Set RS = nothing
Conn.Close
Set Conn = nothing
%>

- som giver flg. fejl:

ADODB.Recordset error '800a0cc1'
Item cannot be found in the collection corresponding to the requested name or ordinal.

/members/debat/lst_debat.asp, line 28



Linie 28:

response.write "<td valign=""top"" width=""10%""><span class=""tekst11""><p align=""center"">" & rs("amount") & "</p></span></td>"
Avatar billede steen_hansen Forsker
11. juni 2002 - 14:20 #7
Hov, nu er den der vist? Prøver at oprette/besvare.
Avatar billede steen_hansen Forsker
11. juni 2002 - 14:23 #8
Nej, fejlmeddelelsen forsvandt af en eller anden årsag, men der er ingen sammentællinger. Og besvarelserne ligger i databasen.
Avatar billede steen_hansen Forsker
11. juni 2002 - 14:26 #9
Og besvarelserne bliver trukket ud på siden som de skal.
Avatar billede steen_hansen Forsker
11. juni 2002 - 14:29 #10
UNDSKYLD, jeg sover! Jeg havde sat ' foran de to sætninger, som gav problemer. Fejlmeddelelsen er der stadig.
Avatar billede tmceu Praktikant
11. juni 2002 - 16:25 #11
RS indeholder ikke feltet amount, da du har åbnet RS baseret på det første statement SQL og ikke strSQL.
Avatar billede tmceu Praktikant
11. juni 2002 - 16:30 #12
Prøv i stedet med denne:

SQL = "SELECT TOP 25 *, (SELECT COUNT(*) FROM debat d2 Where d2.post_parent = d1.post_parent) AS Amount FROM debat d1 WHERE post_parent = 0 ORDER BY emneID DESC"

og slet så bare strSQL
Avatar billede steen_hansen Forsker
11. juni 2002 - 16:37 #13
Jeg fik lidt hjælp fra en kammerat:

SQL = "SELECT debat.emneID, debat.post_parent, debat.nick, debat.emne, debat.brodtekst, debat.kommentar, debat.tid, debat.hits, debat.url, Count(debat_1.emneID) AS CountOfemneID, Max(debat_1.tid) AS MaxOftid FROM debat AS debat_1 RIGHT JOIN debat ON debat_1.post_parent=debat.emneID GROUP BY debat.emneID, debat.post_parent, debat.nick, debat.emne, debat.brodtekst, debat.kommentar, debat.tid, debat.hits, debat.url HAVING (((debat.post_parent)=0));"

response.write "<td valign=""top"" width=""10%""><span class=""tekst11""><p align=""center"">" & RS("CountOfemneID") & "</p></span></td>"

response.write "<td valign=""top"" width=""20%""><span class=""tekst11""><nobr>" & rs("MaxOfTid") & "</nobr></span></td></tr>"

Og det virker. Tak for hjælpen :o)
Avatar billede steen_hansen Forsker
13. marts 2006 - 21:59 #14
Forøvrigt! Hvis det er ok for dig, har jeg et lille tillægsspørgsmål:

Hvis brugeren indtaster 8 cifre (tlf.nr.), kan man dele det op i 4 klaser á 2 cifre i hver, hvis du forstår. Hvordan deler jeg det op, så det bliver vist i 2 klaser á cifre istedet?

Jeg sætter lige point op, hvis det er ok for dig. Eller skal jeg oprette et nyt spm? :o)
Avatar billede steen_hansen Forsker
13. marts 2006 - 21:59 #15
Forkert tråd
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