Avatar billede steen_hansen Forsker
19. september 2002 - 16:19 Der er 25 kommentarer og
2 løsninger

SQL: SELECT COUNT - haster lidt :o(

Jeg har en database med en masse besvarelser på en masse debatoplæg.

Disse debatoplæg bliver oprettet i kategorier, nøjagtigt som her på Eksperten.

Hvordan tæller jeg det antal kategorier sammen, som er blevet brugt? Følgende SQL-sætning skelner ikke mellem antallet af kategorier, men tæller samtlige besvarelser sammen, og det var jo ikke meningen:

<%
'Tæller antal poster
    strSQLcategory = "SELECT COUNT(categoryID) AS AntalKategorier FROM debate" 'WHERE RS("categoryID") <>" - DENNE SÆTNING ER IKKE FÆRDIGGJORT
    Set RS = myConn.Execute(strSQLcategory)
%>
Avatar billede apocryphal Nybegynder
19. september 2002 - 16:25 #1
Hvis (jeg) skal give dig et svar, jeg brug for lidt skematik eller forklaring af hvordan din Database er opbygget.

--
Jonas
Avatar billede steen_hansen Forsker
19. september 2002 - 16:25 #2
En lille rettelse. Kan du lave den rigtig?

<%
'Tæller antal kategorier
    strSQLcategory = "SELECT COUNT(categoryID) AS AntalKategorier FROM debate"
    Set RS = myConn.Execute(strSQLcategory)
%>
Avatar billede steen_hansen Forsker
19. september 2002 - 16:31 #3
categoryID bliver knyttet til oprettelsen af debatemnet. categoryID kan gå fra 1 til 9. Denne værdi bliver smidt ned i categoryID. Her kan der f.eks. ligge flere debatemner med f.eks. værdien 5, 7, 3 eller hvilke kategorier folk nu har valgt at oprette deres debatemner i. Blev det mere tydeliggjort? :o) Det er lidt svært at forklare, men uanset hvordan databasen er bygget op, skal sætningen tælle det antal af kategorier sammen, der er oprettet debatemner i. Selvom der er

8 oprettede debatemner i kategori 1
142 oprettede debatemner i kategori 2

- så er der jo stadig kun oprettet debatemner i 2 kategorier.
Avatar billede steen_hansen Forsker
19. september 2002 - 16:37 #4
Det er stadig kryptisk?

Du har 354387345 oprettede debatemner
Du har 234345434354354 besvarelser på de debatemner

Men de er måske kun oprettet i 8 kategorier. Eller 6. Eller X. Eller ...

Kan det ikke tælles sammen?
Avatar billede steen_hansen Forsker
19. september 2002 - 16:46 #5
Jeg håber du kan hjælpe, Jonas?
Avatar billede steen_hansen Forsker
19. september 2002 - 16:48 #6
... eller er den for kringlet? :o(
Avatar billede steen_hansen Forsker
19. september 2002 - 16:53 #7
Jonas? Andre?
Avatar billede steen_hansen Forsker
19. september 2002 - 17:00 #8
Du giver op, Jonas?
Avatar billede ras2000 Nybegynder
19. september 2002 - 17:54 #9
Jeg kan ikke lige se det for mig, men jeg tror du kan lave en smart lykke på din side, som finder frem til tallet du er ude efter. Lav din sql sætning sådan her:
select categoryID from debate order by categoryID
Det giver dig et recordset med alle categoryID, ordnet efter størrelse.
I koden laver du dette lidt usmukke kode:
a = 0
forrgeid = ""
Do while not rs.eof
if rs(0) <> forrigeid then a = a + 1
forrigeid = rs(0)
rs.movenext
loop
Så skulle den tælle sammen hvor mange forskellige id'er der er i tabellen.
Avatar billede ras2000 Nybegynder
19. september 2002 - 17:55 #10
hov
Avatar billede steen_hansen Forsker
19. september 2002 - 18:02 #11
Det ser faktisk fornuftigt ud, ras. Jeg vil prøve det i aften straks efter aftensmaden :o)
Avatar billede apocryphal Nybegynder
19. september 2002 - 19:15 #12
Såså, rolig - jeg var lige væk fra min PCer.

Jeg går udfra at din Database har nogenlunde denne opbygning:

Categories(debatter).
- categoryId
Threads(Tråde med artikler).
- threadId
- categoryId

Du ønsker at vide, hvor mange categories, der har tråde oprettede.

Dette kan findes sådan her:

SELECT    categories.categoryId
FROM    categories
WHERE    (select count(*) from threads where categoryId = categories.categoryId) > 0

Dette virker måske... Jeg orker ikke at oprette en testdatabase nu, og tjekke det.

--
Jonas
Avatar billede steen_hansen Forsker
19. september 2002 - 20:08 #13
Jonas, tabellen hedder debate... det kræver vist lidt udredning, det her ...

Tabellen = debate
postID = Debatemne-nummer
categoryID = Den specifikke kategori
postparent = hæfter indlæggene til det oprettede debatemne

Hvordan mener du så denne linie skal se ud:

SELECT categories.categoryID FROM categories WHERE (select count(*) from threads where categoryId = categories.categoryId) > 0
Avatar billede apocryphal Nybegynder
19. september 2002 - 20:36 #14
Hmm... Du har valgt at lave det på en lidt anderledes måde.

Normalt ville man, hvis man skal følge bogen, lave to tabeller, en som indeholder informationer om de forskellige kategorier, og en der indeholder information om de specifikke indlæg.

Det er der forvirringen er.

SELECT debate.categoryId
FROM debate
WHERE (SELECT COUNT(postID) FROM DEBATE where categoryId=debate.categoryId) > 0

Denne virker måske...

Hvis ikke, må jeg nok hellere oprette en testdatabase

--
Jonas
Avatar billede steen_hansen Forsker
19. september 2002 - 22:27 #15
Ok. Før udskrev jeg med antallet med <%=RS("AntalKategorier")%>

Hvordan skal det se ud nu?
Avatar billede steen_hansen Forsker
19. september 2002 - 22:28 #16
Jeg får denne fejl:

ADODB.Recordset error '800a0cc1'

Elementet kan ikke findes i den samling, der svarer til det anmodede navn eller ordenstal.
Avatar billede steen_hansen Forsker
19. september 2002 - 22:29 #17
... når jeg sætter denne linie ind:

strSQLcategory = "SELECT debate.categoryID FROM debate WHERE (SELECT COUNT(postID) FROM debate WHERE categoryID=debate.categoryID) > 0"
Avatar billede steen_hansen Forsker
19. september 2002 - 22:31 #18
PS: Der ER to forskellige tabeller: 1 med kategorierne og en med debatindlæg, besvarelser m.m.
Avatar billede apocryphal Nybegynder
19. september 2002 - 23:10 #19
Jeg har ret svært ved at forstå din overklaring af databasen.

Kan du Cut' n' paste creationscriptet herind, eller sende mdb-filen til jonas.swiatek@c.dk?

Så skal jeg se om jeg kan lave dig et statement...

--
Jonas
Avatar billede apocryphal Nybegynder
19. september 2002 - 23:10 #20
Overklaring.... Hmm.... Forklaring er nok nærmere ordet.
Avatar billede ras2000 Nybegynder
20. september 2002 - 09:33 #21
Fungerede min løsning ikke?
Avatar billede steen_hansen Forsker
20. september 2002 - 09:43 #22
Jeg er lige stødt ind i andre problemer :o(

Jeg arbejder på at løse dem og sender Jer et svar hurtigst muligt ....
Avatar billede steen_hansen Forsker
20. september 2002 - 15:45 #23
ras2000, er det sådan du mener?

'Tæller antal kategorier
    strSQLcategory = "SELECT categoryID FROM debate ORDER by categoryID"
    a = 0
    forrgeID = ""
    Do While not RS.EOF
    If RS(0) <> forrigeID Then a = a + 1
    forrigeID = RS(0)

Set RS = myConn.Execute(strSQLcategory)
%>

<b><%=RS("a")
RS.MoveNext
Loop
%>
</b> forskellige kategorier</td>
</tr>
Avatar billede steen_hansen Forsker
20. september 2002 - 15:54 #24
Det kan det vist ikke være, det virker ikke så fedt :o)
Avatar billede ras2000 Nybegynder
23. september 2002 - 11:00 #25
Nej den vil ikke virke.
<%
'Tæller antal kategorier
    strSQLcategory = "SELECT categoryID FROM debate ORDER by categoryID"
    Set RS = myConn.Execute(strSQLcategory)
    a = 0
    forrgeID = ""
    Do While not RS.EOF
      If RS(0) <> forrigeID Then a = a + 1
      forrigeID = RS(0)
      RS.MoveNext
    Loop
response.write "der er " & a & " kategorier"
%>
Avatar billede ras2000 Nybegynder
23. september 2002 - 13:57 #26
Hov, der er en stavefejl
    forrgeID = ""
skal hedder
    forrigeID = ""
Avatar billede steen_hansen Forsker
30. oktober 2002 - 12:57 #27
Undskyld mit sene svar, jeg fandt frem til en helt anden løsning :o)

Tak for hjælpen!
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