php - MySQL Family Tree : Hierarchy, Marriage ref 和 Display

标签 php mysql hierarchical family-tree database-relations

我正在构建一个 Family Tree + History [PHP] 网站来陪伴和展示我妈妈的家谱报告,该报告是她为 parent 的圣诞礼物整理的。这棵树至少将基于一个 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'

“婚姻”表中的 PK 索引由两个 ID 列组成。 (*请原谅我使用性别歧视的术语;这只是出于结构目的——以防万一,因为我是 MySQL 的新手——而且我的家人无论如何都是非常右翼和保守的,但它确实没有这无关紧要,没有任何意义,如果您愿意,也可以将其视为配偶 1 和配偶 2。我个人一点也不恐同,也不对任何人有偏见。结束免责声明。祝大家平安。)

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

如果有人能启发我如何让“婚姻”中的两个配偶 ID 列代替或同时显示这些人的姓名,那就太好了。

但首先我需要知道如何链接这两个表(可能包括“人员”表中的“配偶”列,该列以某种方式与“婚姻”表集成),其次是关于如何进行的任何提示关于显示层次树。

非常感谢。

附言这棵树相当广泛,跨越了大约 6 代。大约有 45 个“人”,我认为有 16 对婚姻,无论这些信息可能值多少钱......

最佳答案

对同一张表进行两次直接的 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;

对于男性的 child 列表,您可以这样传递父亲的 ID:

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;

关于php - MySQL Family Tree : Hierarchy, Marriage ref 和 Display,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14015093/

相关文章:

php - 如何使页面只打开到 iframe 而不是直接调用?

php - 通过 Doctrine 将结果作为数组(水合物数组)获取时,如何获取关联实体?

javascript - 如果在 PHP、JS 中登录失败但发现问题,我想生成一个警报对话框

ios - Mysql blob图像在UiImage swift 3中的显示

mysql - 如何筛选结果

Mysql, 树, 分层查询, 性能

php - Symfony2 Doctrine,通过外键连接表

php - 在 PHP 中从三个 MySQL 表中选择数据

java - 从平面数据生成层次结构

json - R 中的嵌套分层数据框