Avatar billede tblaster Nybegynder
06. oktober 2003 - 18:03 Der er 9 kommentarer og
1 løsning

Tælle antal poster i database

Jeg har en ms sql database med følgende 2 tabeller:
Kategorier
Data

Kategorier indeholder en masse kategorier og under kategorier og data indeholder alt det data som skal vises.

En kategori er defineret med en id og en parentid hvor parentid angiver hvilken kategori kategorien tilhøre. Altså en opbygning som følgende:

Kategori 1              - ParentID = 0, ID = 1
Kategori 2              - ParentID = 0, ID = 2
  Kategori 3          - ParentID = 2, ID = 3
      Kategori 7        - ParentID = 3, ID = 7
  Kategori 4          - ParentID = 2, ID = 4
Kategori 5              - ParentID = 0, ID = 5
Kategori 6              - ParentID = 0, ID = 6

Nu vil jeg gerne tælle hvor mange poster der er i data hvor data'en tilhøre den pågældende kategori eller dens underkategorier. Hvis altså jeg skal tælle hvor mange poster der er i Kategori 2 skal der tælles alle de poster der er under Kategori 2, Kategori 3 og Kategori 7.

Jeg ved hele tiden hvilken kategori der skal tælles antal poster fra udfra følgende: Request("Kategorie") ... dette svare til den der i min db kaldes for ID.

Hvordan kan jeg gøre dette på en smart måde?
Avatar billede meltinis Nybegynder
06. oktober 2003 - 18:51 #1
Kan du ikke prøve at komme med et bedre eksempel? Jeg er ikke helt med på hvordan du får Kategori 7 med i dit eksempel...
Avatar billede tblaster Nybegynder
06. oktober 2003 - 18:58 #2
Åben denne side:

http://www.just2funny.dk/alpha/index.asp?Size=1024x768&funktion=Kategori&parentid=0&Kategorie=13

Det jeg gerne vil have er at nu kategorien "vitser" er vist så skal den tælle alle de antal poster der er under alle de kategorier der kan linkes tilbage til kategorien "vitser"
Avatar billede meltinis Nybegynder
06. oktober 2003 - 19:55 #3
Skriv lige den sidste sætning igen... Det giver jo overhovedet ingen mening :)
Avatar billede swamboo Seniormester
06. oktober 2003 - 22:02 #4
SQL = "SELECT count(*) AS Antal FROM start GROUP BY Side ORDER BY count(*) DESC"

Kan du ikke bruge en count sætning som denne?? Nu kender jeg ikke lige dine kolonne navne...
Avatar billede meltinis Nybegynder
06. oktober 2003 - 22:24 #5
Jeg vil også mene at du skal bruge en COUNT(*). Du skal bare lave en JOIN på dine tabeller først og så vælge hvad kategori det skal være:
WHERE kategori=[et eller andet]
Avatar billede tjp Mester
06. oktober 2003 - 23:25 #6
Det virker ikke noget, der direkte kan klares med en SQL-forespørgsel - der er snarere et rekursivtkald af en slags.
Måske skulle du overveje at navngive/nummerere kategorierne så man, umiddelbart udfra navnet, kan se hvilken overkategori, den tilhører.
Avatar billede tblaster Nybegynder
06. oktober 2003 - 23:35 #7
Jeg kan ikke se at det er muligt at lave en sql sætning med en count hvor jeg tæller alle antal poster ... derfor håbede jeg på at det kunne gøres på en anden måde end at jeg skulle lave en count sætning og så en for alle de underkategorier der er til kategorien. Kan det ikke gøres på en anden måde?

Jeg kan ikke se at det er muligt at lave en join for denne join vil kun virke med den første under kategori (Kategori 3) og altså ikke en underkategori til en underkategori (Kategori 7)
Avatar billede tblaster Nybegynder
08. oktober 2003 - 17:07 #8
Hvad er der galt med denne?

Function CountAntal(ByVal ID)
    dim Sql, Sql2, Antal
   
    Sql = "SELECT count(*) AS Antal FROM Data Where ParentID = " & ID & ""
    set rs = conn.execute(sql)
   
    Antal = rs("Antal")
   
    Sql2 = "SELECT ID FROM Kategorier Where ParentID = " & ID & " Order By ID"
    set rs = conn.execute(sql2)
   
    Do while not rs.eof
        db_ID            = rs("ID")
        Antal = Antal + CountAntal(db_ID)
        rs.movenext()
    Loop
   
    CountAntal        = Antal
   
End Function

Jeg får fejlen:
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

Udskriver jeg mine 2 sql'er får jeg følgende:
SELECT count(*) AS Antal FROM Data Where ParentID = 13
SELECT ID FROM Kategorier Where ParentID = 13 Order By ID
SELECT count(*) AS Antal FROM Data Where ParentID = 14
SELECT ID FROM Kategorier Where ParentID = 14 Order By ID

Det viser jo at den når at køre funktionen igennem en gang og får så en fejl i anden omgang. Det er rigtigt nok at denne skulle give en fejl:
SELECT ID FROM Kategorier Where ParentID = 14 Order By ID
Men så skulle den ikke melde noget, den skulle bare fortsætte med at udføre funktionen.

Hvad gør jeg galt?
Avatar billede tblaster Nybegynder
08. oktober 2003 - 17:17 #9
Glem det  ... tror jeg fik det løst!
Avatar billede tblaster Nybegynder
26. juli 2004 - 09:12 #10
lukker ...
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

IT-JOB