我正在建立一个家谱+历史[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个婚姻,无论这些信息可能值得......
答案 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图中的评论中提出的建议。