Avatar billede whynot Nybegynder
19. december 2011 - 11:16 Der er 2 kommentarer og
1 løsning

parent - child

I mit system skal grupper kunne have tilmeldt nul, en eller flere andre grupper. Desuden skal en gruppe kunne være tilmeldt til nul, en eller flere andre grupper.

Jeg har følgende to tabeller:


grupper:
grupper_id    int(11)       
grupper_navn    tinytext
grupper_dato    timestamp,    CURRENT_TIMESTAMP
...som beskriver grupper med et unikt id samt gruppens navn.

grupper_parents:
indeks    int(11)   
grupper_id    int(11)       
grupper_parent_id    int(11)
...som beskriver tilhørs forholdene.. hvor grupper_id svarer til tabellen "grupper".grupper_id og "grupper_parent_id" svarer til det unikke id som gruppen skal tilmeldes.

ekspempel:
grupper_id = 1, grupper_navn = klasse
grupper_id = 2, grupper_navn = sfo
grupper_id = 3, grupper_navn = kor
grupper_id = 4, grupper_navn = martin
grupper_id = 5, grupper_navn = lukas



grupper_parents:
grupper_id = 1, grupper_parent_id = 0
grupper_id = 2, grupper_parent_id = 1
grupper_id = 3, grupper_parent_id = 1
grupper_id = 4, grupper_parent_id = 2
grupper_id = 4, grupper_parent_id = 3
grupper_id = 5, grupper_parent_id = 1



Ovenstående beskriver at "klasse" indeholder "sfo" og "kor". "martin" er i både "sfo" og "kor", mens "lukas" kun er tilmeldt "klasse".

Nu vil jeg gerne med så få SELECT statements (gerne med blot én) kunne besvare følgende:

1) hvilke grupper "martin" ultimativt tilmeldt?... jeg vil med andre ord gerne have en statement som fortæller at "martin" er tilmeldt: "sfo", "kor" og "klasse", fordi "sfo" og/eller "kor" er tilmeldt "klasse" som dermed også skal listes.

2) hvilke grupper er tilmeldt gruppen "klasse"?... jeg vil dermed gerne have en statement som fortæller at "klasse" indeholder: "sfo", "kor", "lukas" og "martin", fordi "martin" er tilmeldt "sfo" og/eller "kor".

Hvordan pokker gør jeg ovenstående med MySQL?
Avatar billede JensPeterSvensson Nybegynder
19. december 2011 - 19:34 #1
Det tro jeg godt nok ikke er muligt.

Mit forslag i begge tilfælde.

Hent grupper_parents ud og opbyg en datastruktur, der gør at du kan lave de der sprøgsmål.

Mit forslag ville være et nodegrid, hedder sikkert noget andet, hver node er en gruppe, noden peger på barnets direkte forældre og børn. Lav et en dimensionalt array indekseret med grupperne, der peger på noden.

Hvordan det præcist skrives afhænger af sproget.
Avatar billede whynot Nybegynder
20. december 2011 - 21:43 #2
Til JensPeterSvensson:
Hmmmm... jeg forstår simpelthen ikke at det ikke kan lade sig gøre :O Det må være noget med nested selections ... men jeg kan ikke gennemskue hvordan :(
Avatar billede whynot Nybegynder
20. februar 2012 - 22:06 #3
Jeg måtte sande at det ikke umiddelbart kunne lade sig gøre... ja det vil sige.. Jeg kunne skære nogle hjørner ved at anvende stored procedures.. men én statement kunne jeg godt glemme alt om :(

Så jeg lavede en stored procedure der lavede rekursive kald ned i databasen.. ikke pænt.. SLET ikke pænt :(
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