Avatar billede mortency Nybegynder
16. marts 2005 - 17:50 Der er 10 kommentarer og
1 løsning

Select med count

Jeg har en database som har følgende felter:

ID(int)
RID(int)
Subject(text)

Hvordan kan jeg få ut antall postede svar under id`ene jeg henter ut?

SELECT ID,RID,Subject FROM Entries WHERE RID=0 ORDER By ID ASC

Her henter den ut:
1  0 Debatforum ( antall svar under id 1 )
9  0 Kategorier ( antall svar under id 9 )
15  0 Og mange andre ting ( antall svar under id 15 )

Det hadde vært supert om den kunne hente ut alle som er under de igjen også hvis det er mulig.

Se http://www.html.dk/scripts/asp/00015/

//Morten
Avatar billede eldaria Nybegynder
16. marts 2005 - 17:55 #1
select count(ID) from Entries Group By RID
Avatar billede bromer Nybegynder
16. marts 2005 - 17:55 #2
Jeg forstår ikke hvad du mener. Hvis du vil have alle rækker inden for hvert RID kan du benytte:

SELECT COUNT(ID),RID FROM Entries GROUP BY RID;
Avatar billede mortency Nybegynder
16. marts 2005 - 17:57 #3
Jeg vil ha ut alle postede svar under en en ID
Avatar billede mortency Nybegynder
16. marts 2005 - 18:08 #4
Hvis du se her http://www.html.dk/scripts/asp/00015/eksempel.asp

Så vil jeg at
Debatforum (1) ant svar er 7
  Re: Debatforum (2) ant svar er 5
    Re: Debatforum (3) ant svar er 0
    Re: Debatforum (5) ant svar er 3
      Re: Debatforum (6) ant svar er 2
        Re: Debatforum (7) ant svar er 0
        Re: Debatforum (8) ant svar er 0
  Re: Debatforum (4) ant svar er 0

OSV.............
Avatar billede mortency Nybegynder
16. marts 2005 - 18:22 #5
Hvordan knytter jeg disse to sammen til en query?

SELECT ID,RID,Subject FROM Entries WHERE RID=0 ORDER By ID ASC

SELECT COUNT(ID) as NoAnswers,RID FROM Entries GROUP BY RID
Avatar billede kjulius Novice
16. marts 2005 - 20:12 #6
SELECT ID, Subject, COUNT(DISTINCT RID) - 1 AS NoAnswers
FROM Entries
GROUP BY ID, Subject
ORDER BY ID ASC

?
Avatar billede kjulius Novice
16. marts 2005 - 20:48 #7
Nå, nej. Da jeg fik kigget nærmere på dine links, blev jeg klar over, at det ikke er det du beder om. Men jeg tror til gengæld, at du får svært ved at lave den slags rekursiv databehandling i ren SQL.

Jeg får i hvert fald ondt i hovedet af at tænke på det :-(
Avatar billede lorentsnv Nybegynder
17. marts 2005 - 02:04 #8
Jeg har kigget lidt på det, men vi kigge lidt mere på det i morgen aften, hvids der ikke kommer en bedre løsning inden.

Det vil være ret svært i SQL at lave rekursiv databehandling med dynamisk 'dybde', men du kan eventuelt lave en SQL som tager højde for et bestemt antal niveauer. Nedenfor har jeg vist et eksempel med 6 niveauer. Dette kan nemt udbygges.

Jeg bygger op en matrix i en ny tabel, enties_test. Den første SQL vil vise alle 'slutniveauer'.

select     E1.ID as ID1,
    E2.ID as ID2,
    E3.ID as ID3,
    E4.ID as ID4,
    E5.ID as ID5,
    E6.ID as ID6
into entries_test
From entries E1
    left join entries E2 on E1.ID = E2.RID
    left join entries E3 on E2.ID = E3.RID
    left join entries E4 on E3.ID = E4.RID
    left join entries E5 on E4.ID = E5.RID
    left join entries E6 on E5.ID = E5.RID
Where E1.RID = 0


Derefter laver jeg en union hvor jeg checker hvert niveau for ID'er der også har en RID.

insert into entries_test(ID1, ID2,ID3,ID4, ID5, ID6)
Select * from (
    select distinct ID1, NULL AS ID2, NULL AS ID3,NULL as ID4, NULL as ID5, NULL as ID6
    from entries_test
    WHERE NOT ID1 IS NULL
    AND NOT ID2 is NULL
    UNION
    select distinct ID1, ID2, NULL AS ID3,NULL as ID4, NULL as ID5, NULL as ID6
    from entries_test
    WHERE NOT ID2 IS NULL
    AND NOT ID3 is NULL
    UNION
    select distinct ID1, ID2,ID3,NULL as ID4, NULL as ID5, NULL as ID6
    from entries_test
    WHERE NOT ID3 IS NULL
    AND NOT ID4 is NULL
    UNION
    select distinct ID1, ID2,ID3,ID4, NULL as ID5, NULL as ID6
    from entries_test
    WHERE NOT ID4 IS NULL
    AND NOT ID5 is NULL
    UNION
    select distinct ID1, ID2,ID3,ID4, ID5, NULL as ID6
    from entries_test
    WHERE NOT ID5 IS NULL
    AND NOT ID6 IS NULL) a



select * from entries_test
order by ID1, ID2,ID3,ID4, ID5, ID6
Resultatet i denne tabel bliver:

ID1        ID2        ID3        ID4        ID5        ID6       
----------- ----------- ----------- ----------- ----------- -----------
1          NULL        NULL        NULL        NULL        NULL
1          2          NULL        NULL        NULL        NULL
1          2          3          NULL        NULL        NULL
1          2          5          NULL        NULL        NULL
1          2          5          6          NULL        NULL
1          2          5          6          7          NULL
1          2          5          6          8          NULL
1          4          NULL        NULL        NULL        NULL

(8 row(s) affected)

Fra denne tabel kan man udlede hvor mange svar der er til hvert enkelt ID, samt hierarkiet. Antal svar vil være antal ganger et ID vises i tabellen minus 1 (træk en fra da ID'et ikke skal tælle som svar til sig selv).

Kan du bruge noget i denne rætning?
Avatar billede kjulius Novice
17. marts 2005 - 09:06 #9
-->: lorentsnv: Noget af et projekt du har vovet dig ud i. Men det ser faktisk ikke helt dumt ud. Som du selv siger, så er man dog nødt til at fastsætte et max-niveau. Held og lykke. :-)

-->: mortency: En anden vej, som efter min ringe mening, måske ville have de bedste chancer (selv om lorentsvn også har angivet en vej med potentiale): Lav en stored procedure. Problemet med recursive data er jo, at man skal kunne gemme mellemregninger, hvilket er næsten umuligt i alm. SQL. Det vil være muligt i en stored procedure. Jeg føler mig dog ikke selv kompetent til at prøve at opbygge en sådan i Transact SQL. Men måske andre på dette site har mere kompetence på dette område, og vil påtage sig opgaven.
Avatar billede mortency Nybegynder
03. oktober 2005 - 13:43 #10
Post et svar så får du point.
Avatar billede mortency Nybegynder
18. oktober 2005 - 16:03 #11
Lukker spm.
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