Avatar billede lasserasch Juniormester
18. august 2008 - 16:06 Der er 4 kommentarer og
1 løsning

Hjælp til Sub query sætning med count funktion.

Hejsa.

Jeg har 2 tabeller.

1. tabel hedder "tbforums". Den indeholder 2 felter: ID og NAME.
Dette er en oversigt over mine forums i min applikation.

2. tabellen hedder "tbforumthreads". Denne tabel indeholder en liste over de tråde der er oprettet i hvert forum. Denne tabel har et felt som hedder FORUM. Det er et int felt, og har samme værdi som ID feltet i 1. tabel. = angiver hvilket forum tråden hører til.

Jeg vil gerne kunne lade en SQL sætning, hvor jeg trækker en liste ud over alle de forums jeg har.

Samtidig skal jeg for hver record i tbforums tabellen have et felt som er en sammentælling af tråde for det pågældende forum.

Har siddet og bakset med en SQL i lidt tid nu, og jeg er simpelhen ikke dygtig nok til at gennemskue det.

Er der en som kan hjælpe med det?


Pft.

Mvh.
Lasse
Avatar billede aaberg Nybegynder
18. august 2008 - 17:48 #1
noget lignende:

select f.ID, f.NAME, count(ft.ID) AntalTråde
from tbforumns f
inner join tbforumthreads ft on f.ID = ft.FORUM
group by f.ID, f.NAME
Avatar billede kjulius Novice
18. august 2008 - 19:21 #2
Jeg tror du skal bruge en LEFT JOIN i stedet for en INNER JOIN. Der kan være forums oprettet, hvor der endnu ingen tråde er. De vil ikke komme med, hvis du bruger en INNER JOIN.
Avatar billede ldanielsen Nybegynder
18. august 2008 - 23:17 #3
Korrekt, dette vil nok virke:

SELECT tbforumns.ID AS ID, tbforumns.NAME AS NAME, COUNT(*) AS AntalTraade
FROM tbforums
LEFT OUTER JOIN tbforumthreads
ON tbforums.ID = tbforumthreads.FORUM
GROUP BY tbforums.ID, tbforums.NAME

Har rettet aaberg_cc's stavefejl, og indført outer join, samt undgået danske bogstaver i alias'erne

Uden group by vil du få noget som dette:

tbforumns.ID - tbforumns.NAME - tbforumthreads.NAME
1 - navn1 - tråd 1
1 - navn1 - endnu en tråd i 1
1 - navn1 - og igen
2 - navn2 - en tråd
2 - navn2 - en til
3 - navn3 - NULL

med group by:

tbforumns.ID - tbforumns.NAME - COUNT(*)
1 - navn1 - 3
2 - navn2 - 2
3 - navn3 - 0
Avatar billede lasserasch Juniormester
11. oktober 2010 - 20:49 #4
Gammelt spørgsmål. Kan ikke huske udfaldet, men først til mølle får points.
Avatar billede aaberg Nybegynder
11. oktober 2010 - 20:52 #5
ja, 2008 er ved at være et par dage siden :)
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