06. oktober 2003 - 18:03Der 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.
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"
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]
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.
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)
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.
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.