Avatar billede Slettet bruger
12. januar 2011 - 16:07 Der er 8 kommentarer og
1 løsning

Parent node i træ

Hej eksperter.

Jeg har følgende tabeller.

table: subject
subject_id
subject_name
category_id

table: category
category_id
category_name
category_parent_id

Såfremt category_parent_id er sat til 0 betyder det at kategorien er øverste led i "træet".

Forholdet mellem category og subject er som herunder.

1. Underholdning (parent = 0)
    2. Konsol, pc og andre computerspil (parent = 1)
        3. 3d shooters (parent = 2)
            Halflife (emne, categoryid = 3)
        Counterstrike (emne, categoryid = 3)

Jeg vil gerne have et udtræk af alle subjectdata, hvor jeg OGSÅ får det øverste category_led med, som emnet tilhører.

Dvs et udtræk som returnerer det her:

subject_name:        category_id        topkategoriid
Halflife        3            1
Counterstrike        3            1
Avatar billede Syska Mester
12. januar 2011 - 16:25 #1
Dvs ... du vil have parent inklusiv alle childs ?

og hvad kan vi antage du har af data i forvejen du kan lave din query ud fra?

mvh
Avatar billede Slettet bruger
12. januar 2011 - 16:34 #2
Jeg vil blot have "top-noden" fra kategorien som emnet ligger under.

Ligger vel ialt 1000 felter i "subject" og 100 felter i "category".

Fx: i eksemplet jeg har lagt op, har emnet Halflife en relation til category_id 3. Jeg vil så ogfså have returneret "top-noden" som kategorier hører til, hvilket er Underholdning, dvs. category_id 1.
Avatar billede Syska Mester
12. januar 2011 - 16:46 #3
Hvad du kalder top-noden ... kaldes så parent til underholdning.

Men hvad data har du lige nu at query på? Det kan jo laves på 1000 måder :-). Selvfølgelig overdrevet, men det fremme forståelsen.

Og så når jeg læser nærmere, så vil du reelt set have top-noden, så se bort fra overstående.

Hvad version af MSSQL bruger du?

Vi skal ud i noget CTE ... for at rekursivt at finde top-noden.

mvh
Avatar billede Syska Mester
12. januar 2011 - 16:49 #4
CTE = Common Table Expression

http://blog.sqlauthority.com/2008/07/28/sql-server-simple-example-of-recursive-cte/

Der er meget at finde om det på nettet ... kan ikke lave et eksemple her, da jeg ikke sider foran en MSSQL ... så jeg vil helt sikkert lave noget galt.

Men kig på overstående link ... ( btw, en fee blog han har )

Hvis der er problemer kan du jo vende tilbage igen ... eventuelt kommer der måske en anden med det præcise svar.
Avatar billede Slettet bruger
17. januar 2011 - 15:26 #5
Ok, jeg har fundet en simpel måde at gøre det hele på.
Avatar billede Slettet bruger
17. januar 2011 - 15:27 #6
buzzzz -> Smider du et svar?
Avatar billede Syska Mester
17. januar 2011 - 16:09 #7
svar.

Hvad blev løsningen?
Avatar billede Syska Mester
17. januar 2011 - 16:09 #8
svar
Avatar billede Slettet bruger
17. januar 2011 - 16:21 #9
Lavet et felt "top_category_id" i tabellen subject.
Meget simpelt :)
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