Avatar billede cms Nybegynder
08. juni 2002 - 20:16 Der er 11 kommentarer og
1 løsning

Select id + parent's id + parent's id [+ ...]

Jeg har en tabel med bl.a. to kolonner: id og parentid.
Jeg har nu en given id, og jeg vil gerne med ét kald - fra det foranliggende ASP-script - udtrække rækken med denne id, rækken med den id som den netop udtrukne har som parentid, osv. osv.
Kan det lade sig gøre?
Avatar billede Dalgaard Nybegynder
08. juni 2002 - 20:30 #1
select * from table where id = parentid
Avatar billede cms Nybegynder
08. juni 2002 - 20:35 #2
Nej, den dur ikke :o)
Den skal jo fungere ligesom en rekursiv procedure ville i et ASP-script. Dvs. at den record du får ud skal der igen findes en parent på - og på denne endnu en parent - og sådan skal den fortsætte 'op i hierakiet' til parentid er lig 0.
Avatar billede cms Nybegynder
08. juni 2002 - 20:35 #3
Sorry hvis jeg ikke forklarede mig godt nok
Avatar billede terry Ekspert
09. juni 2002 - 09:34 #4
Just onterested to see what comes out of this question. wouldnt have though it possible WITHOUT some recursive procedure!
Avatar billede tmceu Praktikant
09. juni 2002 - 09:45 #5
Du kan gøre det, med hvad der kaldes recursive joins (parent-child). Se denne artikel:

http://www.4guysfromrolla.com/webtech/sqlguru/q120899-1.shtml

Jeg bruger ofte noget lignende ifm. en stykliste struktur i et ERP system.
Avatar billede terry Ekspert
09. juni 2002 - 14:08 #6
tmceu>I may be missing something here but as far as I can se this only gives a parent child relationship for one level only. You can only see if a parent has children not childrens children. For example:

ID, ParentID
1  0
2  1
3  0
4  2

In this simple example ID 1 has child (ID = 2) and that child(ID = 2) also has a child (id = 4)

So if I want to see the family of ID 1 then I cant! Or can I?
Avatar billede tmceu Praktikant
09. juni 2002 - 15:25 #7
Yes you can, I made a similar example like this

MyID, Parent

1, 0
2, 1
3, 2
4, 3
5, 4

For ease of verification, you can see that each record relates to the previous one in the table. To prove that it works, try to break the relationships, by changing a parent to some non-existing value somewhere in the middle :-)
Avatar billede cms Nybegynder
09. juni 2002 - 16:16 #8
Tak tmceu - det ser ud til lige hvad jeg har brug for. Jeg prøver lige, vender tilbage i aften
Avatar billede cms Nybegynder
10. juni 2002 - 00:04 #9
Well det bliver måske alligevel ikke lige iaften. Har et projekt at lægge de sidste hænder på. Men en af de følgende dage. Jeg vælger at acceptere dit svar nu, men håber du vil hjælpe hvis jeg støder ind i problemer. Hvis du ønsker flere points er jeg ikke den der er nærig.
Avatar billede tmceu Praktikant
10. juni 2002 - 00:07 #10
Og da point ikke kan veksles til mælk, brød eller menneskevaluta, er det ikke det afgørende for min indsats her på Eksperten :-)
Avatar billede cms Nybegynder
16. juni 2002 - 12:34 #11
Netop hvad jeg havde håbet =o)
Eksemplet fra 4GuysFromRolla virker fint, men jeg vil gerne have ordnet mine udtræk, så de kommer i den rigtige rækkefølge - hvilket er:
  - Hejsa1
  - Hejsa1.Hej1
  - Hejsa1.Hej2
  - Hejsa1.Hej3
  - Hejsa2.Hej1
  - Hejsa2.Hej2
osv.
Iøvrigt giver eksemplet:
SELECT * FROM tabel1 AS t1 JOIN tabel1 AS t2 ON t1.ID = t2.ParentID
ikke resultater fra det øverste niveau.
Det skal siges, jeg har en hjælpekolonne, der hedder nLevel som går fra 0..2 - den kan måske bruges til noget?
Avatar billede terry Ekspert
17. juni 2002 - 20:48 #12
tmceu>If I want to ONLY show the family of a specific ID, then WHAT do I use for the WHERE clause?

In you SIMPLE example I can see that is no problem but lets say there is MORE than one top LEVEL and I want to see a specific top level NODE and all child nodes to THAT top level.
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