Permalänk
Medlem

mySql - parent/child-problem

Hallå (igen).

Jag har två tabeller med följande struktur:

org
orgID, orgName, orgParent

auth
userID, orgID

Om användaren har behörighet i en organisation så har man även det i underliggande, men hur löser jag detta när det blir mer än ett djup?

ex.
org
orgID, orgName, orgParent
1, Skåne, NULL
2, Malmö, 1
3, Limhamn, 2
4, Sthlm, NULL
5, Bromma, 4

Om inparametern är orgID = 1, så vill jag returnera Skåne, Malmö och Limhamn.

Det finns inget hinder hur många nivåer det får finnas.

Tack på förhand!

Visa signatur

Jag hatar att vara förkyld!

Permalänk
Hedersmedlem

Vid en snabb anblick så ser det ut som att du söker funktionalitet som finns i exempelvis Oracles dyrare produkter.

WITH RECURSIVE and MySQL — här är någon som emulerar liknande funktionalitet i MySQL; kanske kan vara värt att läsa.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Hedersmedlem

När jag har designat databaser så har jag generellt försökt undvika den typen av cykliska relationer. Det är ett svårt problem att lösa bra. Jag hade försökt tänka igenom problemet och se om det finns en annan lösning.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem

Detta är ett klassiskt problem som går att lösa på lite olika sätt. Ett exempel är denna typen av lösning: http://en.m.wikipedia.org/wiki/Nested_set_model

Det finns fler lösningar på problemet, men den är den jag spontant kommer på. Ska se om jag hinner kika i boken SQL antipatterns och ge förslag på fler lösningar, vet att just det problemet diskuteras där.

Skickades från m.sweclockers.com

Visa signatur

..:: RiJo ::..
Computer: Lenovo X300
Platform: Gentoo

Permalänk
Medlem

varför inte dela upp kontrollen i flera steg och använd något scriptspråk. Ser ingen praktisk anledning att göra det du beskriver i en sats, såvida du inte ska hantera miljontalskunder som gör uppslag stup i kvarten...

Permalänk
Medlem

Du skulle ju också kunna skriva en enklare procedure med en while i. Kolla lite på hur de pratar om while och procedures här: http://stackoverflow.com/questions/17139074/while-loop-with-i...

Så typ något med:
Skriv select på de värden du vill ha ut, kör en iteration över samlingen (while-loopen) och kolla då varje gång om den har någon parent alt. child eller ej. Kanske inte så elegant, men är en enklare lösning som du har skrivit själv