webForumDet fria alternativet

Skriva ut relaterade personer ifrån child

Databaser & SQL

7 svar · 532 visningar · startad av Travoni

Medlem sedan okt. 20041 556 inlägg
Frågan#1

Alla personer finns i tabellen person, barnen är länkade till föräldrarna via tabellen person_person.

[B]person[/B]
|id|name|adress|klass|telefon|

[B]person_person[/B]
|parent_id|child_id|

Exempeldata
[B]person[/B]
|1|Britta|Gata 2|1|08-123456|
|2|Bernt|Gata 2| |08-123456|
|3|Berit|Gata 2| |08-123456|
|4|Åke|Gata 3|1|08-123450|
|5|Ågart|Gata 3| |08-123450|
|6|Åsa|Gata 3| |08-123450|

[B]person_person[/B]
2|1
3|1
5|4
6|4

Alltså Britta och Åke har sina föräldrar med i tabellen och då vill jag att resultatet skall bli.

|1|Britta|Gata 2|1|08-123456|
|2|Bernt|Gata 2| |08-123456|
|3|Berit|Gata 2| |08-123456|
|4|Åke|Gata 3|1|08-123450|
|5|Ågart|Gata 3| |08-123450|
|6|Åsa|Gata 3| |08-123450|

Hur gör jag?

Medlem sedan mars 2004485 inlägg
#2

Vad menar du ska göras? Du har en tabel med personer och en tabbel med förälder/barn. Men vad ska du ha ut, "resultatet" är bara en kopia av exempledatan eller ser jag fel?

Medlem sedan okt. 20041 556 inlägg
#3

Du ser helt rätt, men såklart så är det mycke mer data. Problemet är att gruppera ihop barnen med rätt förälder och gruppera dessa så.

[B]Barn 1[/B]
 Förälder 1-1
 Förälder 1-2
[B]Barn 2[/B]
 Förälder 2-1
 osv
Medlem sedan okt. 20041 556 inlägg
#4

Eller kanske snarare så här:

Barn 1, Förälder 1-1, Förälder 1-2
Barn 2, Förälder 2-1, Förälder 2-2
osv
Medlem sedan aug. 20039 340 inlägg
#5
SELECT child.*,parent.* FROM person child
INNER JOIN person_person ON person_person.child_id = child.id
INNER JOIN person parent ON person_person.parent_id = parent.id

Svar får du på följande format:

child.id|child.name|parent.id|parent.name
1       |Britta    |2        |Bernt
1       |Britta    |3        |Berit
4       |Åke       |5        |Ågart
4       |Pke       |6        |Åsa

Nu har jag utelämnat adress/klass/telefon för enkelhetens skull, men du ser principen.

Medlem sedan okt. 20041 556 inlägg
#6

Fett nice.
Lite störigt att barnets namn upprepar sig men det får jag nog leva med.
Tack!

Medlem sedan aug. 20039 340 inlägg
#7

Nytt förslag:

SELECT child.*,par1.*,par2.* FROM person child
INNER JOIN person_person rel1 ON rel1.child_id = child.id
INNER JOIN person par1 ON rel1.parent_id = par1.id
INNER JOIN person_person rel2 ON rel2.child_id = child.id
INNER JOIN person par2 ON rel2.parent_id = par2.id AND par1.id > par2.id

Den organiserar datat som du vill, men med skillnaden att det förutsätter att varje barn har precis två föräldrar registrerade.
Bara en förälder = barnet visas inte.
Fler än en förälder = lustiga resultat.

Medlem sedan okt. 20041 556 inlägg
#8

Fint skall testa det. Men visst det är barn som bara har en förälder.
Jag får labba lite.

253 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)