Avatar billede thewizard Nybegynder
14. december 2004 - 05:30 Der er 24 kommentarer og
1 løsning

Loop i loop

Forsøger at lave et loop i et loop.

Databasen: bbstopic & bbsreply

bbstopic indeholder: ID, author, topic, date, categorytarget, lastedit, text.

bbsreply indeholder: ID, author, headline, date, targettopicID, text.

-----------------

I det jeg lister fra bbstopic: "topic" (tekst), ønsker jeg listet ANTAL bbsreply("targettopicID"), som er ENS med bbstopic("ID")

Så det ville komme til at se således ud:

Topic 1. (antal replies)
Topic 2. (antal replies)
Topic 3. (antal replies)

osv.

Der skal derfor foretages et loop i et loop, således at ID'et for hvert topic bliver brugt, til at finde antal targettopicID fra replies'ne.

Håber i forstår spørgsmålet.

Ønsker hjælp og en forklaring på kode i laver :).
Avatar billede thewizard Nybegynder
14. december 2004 - 05:31 #1
Nøj det er sort, håber i forstår det ;) Pææææn træt.
Avatar billede Slettet bruger
14. december 2004 - 06:27 #2
Hvad med at bruge subquery:

select t.*
    ,(select count(*)
      from bbsreply r
      where r.ID = t.ID)
from bbstopic t
Avatar billede arne_v Ekspert
14. december 2004 - 07:20 #3
SELECT bbstopic.ID,bbstopic.topic,COUNT(*)
FROM bbstopic,bbsreply
WHERE bbstopic.topic=bbsreply.targettopicid
GROUP BY bbstopic.ID

måske
Avatar billede thewizard Nybegynder
14. december 2004 - 14:38 #4
Gutter, i skal forklare jeres kode :). Jeg prøver lige. Fortæl endelig hvis jeg skal forklare situationen bedre.
Avatar billede arne_v Ekspert
14. december 2004 - 14:41 #5
Mit forslag er bare en helt almindelig COUNT med GROUP BY
Avatar billede thewizard Nybegynder
14. december 2004 - 14:46 #6
<%
    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.Mappath(".") & "\db\site.mdb"
%>



<%
    Set rs = Server.CreateObject("ADODB.RecordSet")
    strSQL = "SELECT * FROM bbstopic WHERE categorytarget =" & ID & " ORDER BY lastedit;"
    rs.Open strSQL, Conn
%>

<%

Do until RS.EOF
ID = RS("ID")
%>



<a href="topic.asp?ID=<%=RS("ID")%>"><%=RS("topic")%></a>&nbsp;<%=RS("date")%>&nbsp;<%=RS("lastedit")%><br>

<%
RS.MoveNext
loop

%>

Det er jo logisk nok - ingen farlige ting her, men ID = RS("ID"), skal bruges til at hive antal replies ud fra bbsreply. :) Hmm
Avatar billede thewizard Nybegynder
14. december 2004 - 14:50 #7
arne_v, jeg er ikke helt mester i SQL ;)

mener du     strSQL = "SELECT bbstopic.ID,bbstopic.topic,COUNT(*) from bbstopic,bbsreply WHERE bbstopic.topic=bbsreply.targettopicID GROUP BY bbstopic.ID";"

? Kan du bruge din kode i en sammenhæng... :)?
Avatar billede arne_v Ekspert
14. december 2004 - 14:53 #8
strSQL = "SELECT bbstopic.ID AS id,bbstopic.topic AS topic,COUNT(*) AS cnt FROM bbstopic,bbsreply WHERE bbstopic.topic=bbsreply.targettopicID GROUP BY bbstopic.ID";"

skulle gøre det muligt for dig at bruge:

RS("id")
RS("topic")
RS("cnt")
Avatar billede thewizard Nybegynder
14. december 2004 - 15:01 #9
Får en fejl, mate :)

Fejltype:
Der opstod en Microsoft VBScript-kompileringsfejl (0x800A0401)
Slut på sætning var ventet
/category.asp, line 43, column 163
strSQL = "SELECT bbstopic.ID AS id,bbstopic.topic AS topic,COUNT(*) AS cnt FROM bbstopic,bbsreply WHERE bbstopic.topic=bbsreply.targettopicID GROUP BY bbstopic.ID";"
Avatar billede arne_v Ekspert
14. december 2004 - 15:03 #10
... bbstopic.ID;"

kun en " til sidst
Avatar billede thewizard Nybegynder
14. december 2004 - 15:03 #11
strSQL = "SELECT bbstopic.ID AS id,bbstopic.topic AS topic,COUNT(*) AS cnt FROM bbstopic,bbsreply WHERE bbstopic.topic=bbsreply.targettopicID GROUP BY bbstopic.ID";"

Et " for meget i slutningen, rite? ;)

strSQL = "SELECT bbstopic.ID AS id,bbstopic.topic AS topic,COUNT(*) AS cnt FROM bbstopic,bbsreply WHERE bbstopic.topic=bbsreply.targettopicID GROUP BY bbstopic.ID;"


Så får jeg denne fejl:

Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access-driver] Du har forsøgt at køre en forespørgsel, der ikke medtager det angivne udtryk "topic" som en del af en aggregatfunktion.
/category.asp, line 44
Avatar billede arne_v Ekspert
14. december 2004 - 15:05 #12
strSQL = "SELECT bbstopic.ID AS id,bbstopic.topic AS topic,COUNT(*) AS cnt FROM bbstopic,bbsreply WHERE bbstopic.topic=bbsreply.targettopicID GROUP BY bbstopic.ID,bbstopic.topic ;"
Avatar billede thewizard Nybegynder
14. december 2004 - 15:06 #13
Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][ODBC Microsoft Access-driver] Datatyper i JOIN-udtrykket stemmer ikke overens.
/category.asp, line 44
Avatar billede thewizard Nybegynder
14. december 2004 - 15:06 #14
:p
Avatar billede arne_v Ekspert
14. december 2004 - 15:10 #15
strSQL = "SELECT bbstopic.ID AS id,bbstopic.topic AS topic,COUNT(*) AS cnt FROM bbstopic,bbsreply WHERE bbstopic.id=bbsreply.targettopicID GROUP BY bbstopic.ID,bbstopic.topic ;"
Avatar billede thewizard Nybegynder
14. december 2004 - 15:12 #16
Den virker, arne, men så får jeg straks fejl i
<a href="topic.asp?ID=<%=RS("ID")%>"><%=RS("topic")%></a>&nbsp;<%=RS("date")%>&nbsp;<%=RS("lastedit")%><br>

Fejltype:
ADODB.Recordset (0x800A0CC1)
Elementet kan ikke findes i den samling, der svarer til det anmodede navn eller ordenstal.
/category.asp, line 56

:)
Avatar billede arne_v Ekspert
14. december 2004 - 15:15 #17
date og lastedit er ikke med i select ...
Avatar billede thewizard Nybegynder
14. december 2004 - 15:16 #18
Tænkte jeg også - og derfor fjernede dem :). Men ønsker jeg at hive "cnt" ud - som jeg forstår er count(*). Skriver jeg:

<a href="topic.asp?ID=<%=RS("ID")%>"><%=RS("topic")%></a> <%=cnt%>

? :) Men den skriver ikke noget.
Avatar billede arne_v Ekspert
14. december 2004 - 15:16 #19
måske:

strSQL = "SELECT bbstopic.ID AS id,bbstopic.topic AS topic,COUNT(*) AS cnt,MAX(bbstopic.date) AS date,MAX(bbstopic.lastedit) AS lastedit FROM bbstopic,bbsreply WHERE bbstopic.id=bbsreply.targettopicID GROUP BY bbstopic.ID,bbstopic.topic ;"
Avatar billede arne_v Ekspert
14. december 2004 - 15:17 #20
ikke cnt men RS("cnt")
Avatar billede thewizard Nybegynder
14. december 2004 - 15:18 #21
Det virker, arne.. skal bare ha' det til at virke med resten af sitet :). Accepterer det som svar - kan du forklare:

strSQL = "SELECT bbstopic.ID AS id,bbstopic.topic AS topic,COUNT(*) AS cnt FROM bbstopic,bbsreply WHERE bbstopic.id=bbsreply.targettopicID GROUP BY bbstopic.ID,bbstopic.topic ;"

Præcist hvad du gør? :) Og bare lad det være svar for nu.
Avatar billede arne_v Ekspert
14. december 2004 - 15:23 #22
count tæller antal
max tager største værdi
groub by tager count og max for hver værdi af de felter man laver group by på
noget as xxx tager noget som et felt ved navn xxxx
Avatar billede thewizard Nybegynder
14. december 2004 - 15:25 #23
hehe ;) må jeg læse lidt på. Godt svar, arne.
Avatar billede thewizard Nybegynder
14. december 2004 - 17:03 #24
arne, læser du stadig her ? ;) Har et spørgsmål
Avatar billede arne_v Ekspert
14. december 2004 - 19:16 #25
ja

nu hvor jeg er kommet hjem og har spist

jeg formoder at du hentyder til http://www.eksperten.dk/spm/571064
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
Computerworld tilbyder specialiserede kurser i database-management

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