Bo Rattenborg skrev:
> Jeg har en tabel med personer:
> id | fornavn | efternavn | moder | fader
Er moder og fader tekstfelter? I så fald registrerer du disse navne
flere steder - noget der giver mulighed for mange fejl.
> Samt en tabel til sammenkobling med børn:
> personer_børn
> id| person_id | barn_id
Den tabel er så vidt jeg kan se overflødig.
Prøv med følgende design:
PERSONER:
personID | fornavn | efternavn | moderID | faderID
moderID og faderID er fremmednøgler til den samme tabel som de selv
findes i.
> fint nok, men er det er muligt at trække oplysninger ud om en
> persons navn, mor, far, børn på samme tid, eller er det
> nødvendigt med flere Queryes ?
Det er let nok at finde forældrene til en person. Du skal lave et
join mellem person-tabellen og person-tabellen - og selv om det
måske lyder mærkeligt kan det sagtens håndteres af databasen. Det
kræver blot at du benytter alias for tabellen mindst én af gangene.
Med mit ændrede tabeldesign kan du lave følgende forespørgsel:
SELECT p.personID, p.fornavn, p.efternavn
f.fornavn AS FarFornavn, f.efternavn AS FarEfternavn,
m.fornavn AS MorFornavn, m.efternavn AS MorEfternavn
FROM PERSONER p LEFT JOIN PERSONER f
ON f.personID = p.faderID
LEFT JOIN PERSONER m
ON m.personID = p.moderID
WHERE p.personID = 234
Ovenstående forespørgsel returnerer en person med tilhørende
forældre. Der er brugt LEFT JOIN for stadig at returnere
oplysninger selv om enten faderen eller moderen ikke er registeret.
For at finde en enkelt persons børn kan du søge efter værdier i
enten moderID eller faderID-feltet.
SELECT p.personID, p.fornavn, p.efternavn
FROM PERSONER p
WHERE faderID = 234
OR moderID = 234
Hvis du ikke kender id-værdien er det straks værre - mySQL
understøtter vist ikke subselects, som ville være det nemme måde at
finde det id-nummer der er sat ind ovenfor.
--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO -
www.fiduso.dk)
I ovenstående tekst benyttes nyt komma
(rettelser modtages gerne i dk.kultur.sprog)