/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
[mysql] personer og deres forældre / børn
Fra : Bo Rattenborg


Dato : 07-09-02 11:42

Jeg har en tabel med personer:
id | fornavn | efternavn | moder | fader

Samt en tabel til sammenkobling med børn:
personer_børn
id| person_id | barn_id

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 ?

Bo



 
 
Jens Gyldenkærne Cla~ (07-09-2002)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 07-09-02 12:08

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)

Bo Rattenborg (07-09-2002)
Kommentar
Fra : Bo Rattenborg


Dato : 07-09-02 12:12

> > 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.

Nej de indeholder personer.id (som jo nok er problemet da det er fra samme
tabel)

> > 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.

Aha

> 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

Lyder godt, tak så er der noget at arbejde videre med





Bo Rattenborg (07-09-2002)
Kommentar
Fra : Bo Rattenborg


Dato : 07-09-02 12:53

> Den tabel er så vidt jeg kan se overflødig.

Åh ja, - hvis der er forældre, er der jo også børn.

Bo



Nis Jørgensen (09-09-2002)
Kommentar
Fra : Nis Jørgensen


Dato : 09-09-02 12:14

On Sat, 7 Sep 2002 12:42:21 +0200, "Bo Rattenborg"
<bo.rattenborg@[nospam]mail.dk> wrote:

>Jeg har en tabel med personer:
>id | fornavn | efternavn | moder | fader

Hvad gør du med personer der har 2 forældre af det samme køn?

--
Nis Jørgensen
Amsterdam

Please include only relevant quotes, and reply below the quoted text. Thanks

Jens Gyldenkærne Cla~ (09-09-2002)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 09-09-02 12:20

Nis Jørgensen skrev:

>>Jeg har en tabel med personer:
>>id | fornavn | efternavn | moder | fader
>
> Hvad gør du med personer der har 2 forældre af det samme køn?

Hvis vi taler om biologiske forældre er problemet nok ikke så stort
.

Men hvis man i stedet vil registere forældre uanset om det er
plejeforældre, papforældre, adoptionsforældre eller lignende - så
skal man nok lave en anden struktur.


--
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)

Bo Rattenborg (09-09-2002)
Kommentar
Fra : Bo Rattenborg


Dato : 09-09-02 18:22

> Hvad gør du med personer der har 2 forældre af det samme køn?

høhø, det har jeg ikke lige taget højde for, men da jeg laver det til en af
mine kammerater der skal bruge til noget slægtsforskning er det nok ikke det
store problem, ellers må det tilføjes / ændres senere.

Bo

> Nis Jørgensen
> Amsterdam

uhh har lige været 10 dage i Amsterdam, go' fin..........



Peter Lykkegaard (11-09-2002)
Kommentar
Fra : Peter Lykkegaard


Dato : 11-09-02 10:55

Som svar på skriblerier nedfældet af Bo Rattenborg :

> 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 ?
>
Du kan muligvis finde inspiration her

URL:http://www.developersdex.com/sql/search.asp?Search=nested+set+model&Scop
e=SQL&p=&x=23&y=10

mvh/Peter Lykkegaard



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste