Avatar billede dotdonk Nybegynder
20. oktober 2006 - 09:23 Der er 6 kommentarer og
1 løsning

Hjælp til SELECT COUNT funktion?

Hej med jer

Jeg sidder med et lille SQL COUNT problem, hvor jeg skal tælle antal bruger-relationer i 3. niveau.

Case:

Tælle samlet antal brugere relationer i 3. niveau.:

Eks.:

0. Niveau:          Hans kender Børge.

1. Niveau:          Børge kender:

2. Niveau:                  - Bente
2. Niveau:                  - Pernille

2. Niveau:        Pernille  kender: 
3. Niveau:                  - Peter


DB:

Bruger tabel:
Id        Navn
------------------------
1        Hans
2        Børge
3        Bente
4        Pernille
5        Peter

BrugerRelations tabel:
Id    BrugerId1      BrugerId2
--------------------------------------------
1          1                  2            - Hans kender Børge
2          2                  1            - Børge kender Hans


3          2                  4            - Børge kender Pernille
4          4                  2            - Pernille kender Børge


5          2                  3            - Børge kender Bente
6          3                  2            - Bente kender Børge

7    4                        5            - Pernille kender Peter 
8    5                        4            - Peter kender Pernille



Min kontakt    = 1 
Mine kontakters kontakter  = 2
Deres kontakter  = 1 ?

Den eneste kontakt som Børge har som kender en i 3. niveau er Pernille. Pernille kender Peter.

Er der en som kan hjælpe mig med dette SELECT COUNT ?

Håber at høre fra nogen snarest.

Mange hilsner

DD:
Avatar billede teepee Nybegynder
20. oktober 2006 - 09:30 #1
Er det på 2000 eller 2005? 2005 har nemlig CTE (Common Table Expressions) som måske kan hjælpe dig.
Avatar billede teepee Nybegynder
20. oktober 2006 - 09:34 #2
Eller er her en artikle om hvorledes at der kan implementeres rekursive counts af childrecords:
http://www.wwwcoder.com/main/parentid/191/site/1857/68/default.aspx
Avatar billede lorentsnv Nybegynder
20. oktober 2006 - 09:38 #3
select *
From Tabel t1
left join Tabel t2 on t1.BrugerID2 = t2.BrugerID1
left join Tabel t3 on t2.BrugerID2 = t3.BrugerID1
where t1.BrugerID1 = 1
and t2.BrugerID2 <> t1.BrugerID1
and t3.BrugerID2 <> t1.BrugerID1
and t3.BrugerID2 <> t2.BrugerID1
Avatar billede lorentsnv Nybegynder
20. oktober 2006 - 09:39 #4
evt:

select count(*)
From Tabel t1
left join Tabel t2 on t1.BrugerID2 = t2.BrugerID1
left join Tabel t3 on t2.BrugerID2 = t3.BrugerID1
where t1.BrugerID1 = 1
and t2.BrugerID2 <> t1.BrugerID1
and t3.BrugerID2 <> t1.BrugerID1
and t3.BrugerID2 <> t2.BrugerID1
Avatar billede kjulius Novice
22. oktober 2006 - 22:45 #5
Måske sådan?

SELECT B.Navn, COUNT(DISTINCT R1.BrugerID2) AS Niveau1kontakter, COUNT(DISTINCT R2.BrugerID2) AS Niveau2kontakter, COUNT(DISTINCT R3.BrugerID2) AS Niveau3kontakter
FROM Brugere B
LEFT JOIN BrugerRelations R1 ON B.ID = R1.BrugerID1
LEFT JOIN BrugerRelations R2 ON R1.BrugerID2 = R2.BrugerID1
LEFT JOIN BrugerRelations R3 ON R2.BrugerID2 = R3.BrugerID1
GROUP BY B.Navn
Avatar billede janus_007 Nybegynder
23. oktober 2006 - 13:49 #6
Eller er det bare mig, eller har du ikke lidt mange uafsluttede spørgsmål ;-) Vil du ikke rydde lidt op i de spørgsmål du har stillet rundt omkring?
Avatar billede dotdonk Nybegynder
23. oktober 2006 - 15:51 #7
Hejsa

Undskyld den lange svartid og tak for jeres svar!

Jeg har lige testet --> "lorentsnv" SQL og det virker.

Jeg har ikke fået set på jeres andres...

Indtil videre så anvender jeg lorentsnv's SQL.

--> "kjulius" dit SQL eksempel ser også rigtig cool ud, med flere niveau COUNTS.

Har dog ikke testet det...

Fortsat go' dag.
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