MySQL族树:层次结构,婚姻参考和显示

时间:2012-12-23 22:07:42

标签: php mysql hierarchical family-tree database-relations

我正在建立一个家谱+历史[PHP]网站,以陪伴和展示我妈妈为她父母的圣诞礼物汇总的家谱报告。树至少将基于MySQL数据库(“家庭”),我目前正在使用两个表:“人”和“婚姻”。我还有第三张桌子,“亲子”,但后来认为没必要。

表的结构如下:

PERSONS
- 'personID' [tinyint, pk]
- 'firstName'
- 'lastName'
- 'sex' [set{'M','F'}]
- 'birthDate'
- 'fatherID' [internal rel = 'personID']
- 'motherID' [internal rel = 'personID']
- 'birthPlace'
- 'deathDate'
- 'deathPlace'
- 'birthRecord' (filename)

MARRIAGES
- 'husbandID' [internal rel = 'persons.personID']
- 'wifeID' [internal rel = 'persons.personID']
- 'date'
- 'place'
- 'record'

'marriages'表中的PK索引由两个ID列组成。 (*请原谅我对性别歧视用语的使用;它只是出于结构目的 - 以防万一,我是MySQL的新手 - 而且我的家人也是非常右翼和保守的,但它确实没有如果你愿意的话,重要而且没有任何意义,也可能被认为是配偶1和配偶2。我个人对任何人都不是同性恋或偏见。结束免责声明。和平给所有人。)

所以......你明白为什么我要为“婚姻”保留一个单独的表:每个婚姻都有自己的数据必须包括在内,重复两个记录中每个婚姻的数据都是愚蠢的配偶。我之前在'人员'表中有一个'spouseID'列,但是我还需要手动匹配每个配偶的ID,并且无法弄清楚如何将该列链接到相应的婚姻列(在'无论如何,婚姻的表格,所以我放弃了。

如果有人能够告诉我如何在“婚姻”中获得两个配偶身份列,以显示人员的名字,或者也可以显示这些人名。

但主要是我需要知道如何链接这两个表(可能包括'人'表中的'配偶'列,它以某种方式与'婚姻'表集成),其次是关于如何去的任何提示关于显示分层树。

非常感谢。

P.S。这棵树相当广泛,跨越了大约6代。有大约45个'人',我认为16个婚姻,无论这些信息可能值得......

2 个答案:

答案 0 :(得分:1)

在同一张桌子上进行两次简单的SELECT-JOIN查询,将所有婚姻作为一个清单。

SELECT m.*,
      h.firstName as husbandFirstName, h.lastName as husbandLastName, 
      w.firstName as wifeFirstName, w.lastName as wifeLastName 
FROM marriages m
LEFT JOIN persons h ON m.husbandID = h.personID
LEFT JOIN persons w ON m.wifeID = w.personID;

对于男性的子女列表,您可以传递父亲的身份证明:

SELECT p.firstName as fatherFirstName, p.lastName as fatherLastName, 
     c.firstName as childFirstName, c.lastName as childLastName
LEFT JOIN persons c ON c.fatherID = p.personID
WHERE p.personID = $fatherID;

答案 1 :(得分:1)

以下是我在ERD图中的评论中提出的建议。

ERD