【问题标题】:MySQL Stored Procedure to generate Pedigree/Family tree chartMySQL存储过程生成谱系/家谱图
【发布时间】:2021-12-09 21:33:26
【问题描述】:

我正在尝试使用 MySQL 存储过程生成谱系 [换句话说,家谱 :)] 表 ....

我的架构:

CREATE TABLE `horses` ( 
`horse_id` int(10) NOT NULL AUTO_INCREMENT,
`horse_name` varchar(32) NOT NULL,
`SireID` int(10) DEFAULT NULL,
`DamID` int(10) DEFAULT NULL, 
PRIMARY KEY (`horse_id`),
KEY `FKsire` (`SireID`),
KEY `FKdam` (`DamID`),
CONSTRAINT `FKdam` FOREIGN KEY (`DamID`) REFERENCES `horses` (`horse_id`),
CONSTRAINT `FKsire` FOREIGN KEY (`SireID`) REFERENCES `horses` (`horse_id`)
)

附言'SireID' 和 'DamID' 代表父母 ID。我花了几天的时间来解决这个问题,搜索,试验......目前我没有任何可行的解决方案:

任何人都可以帮助在一行中生成表格:(。我想构建类似这个参考https://www.pedigreequery.com/malibu2

任何帮助或提示都非常感谢:),在此先感谢

【问题讨论】:

  • 指定精确的 MySQL 版本。将示例数据添加为文本 INSERT INTO,并将此数据的所需输出添加为格式化的普通表。
  • 嗨 Akina,我使用的是 5.0.2 版,您可以查看 pedigreequery.com/malibu2> 页面的示例,我想构建相同的东西,但使用 MySQL 和 CodeIgniter
  • 嗨 Akina,提前感谢您的帮助,我只想在单个数据库调用中获取整个谱系表并在页面上显示。包含马 ID、马名、马坝 ID、马坝名称、马父 ID、马父名的数组。 (Dam & Sire 是父母)对于每个层次结构
  • 你今天已经问过这个问题了:stackoverflow.com/questions/69685786/…
  • 你好影子,是的,但没有任何答案问题已关闭,所以我再次发布以获得任何答案

标签: mysql sql stored-procedures


【解决方案1】:

在 MySQL 中无法做到这一点,但您可以将数据格式化为 html 标签,然后复制为纯文本,将纯文本重命名为“someName.html”,然后您就可以按照您想要的方式查看它。

示例

  • 1 - 创建表
创建表人( 类别 varchar(100) ,年龄整数 ,fullName varchar(100));
  • 2 - 填充表格
插入人 值('A',20,'亚历山大') ,('A', 20, '玛丽') ,('A', 25, '罗杰') ,('A', 25, '一分钱') ,('B', 21, '罗尼') ,('B', 20, '凯伦') ,('B', 25, '彼得');
  • 3 - 查询
SELECT '' 联合所有 选择连接('' ,IF(prevCategory IS NULL,CONCAT(''),'') ,IF(prevAge IS NULL,CONCAT(''),'') ,CONCAT('') ,'') 作为 html_body FROM (SELECT p.category,LAG(category,1) OVER(PARTITION BY p.category ORDER BY p.category,p.age) 作为 prevCategory ,LEAD(category,1) OVER(PARTITION BY p.category ORDER BY p.category,p.age) as nextCategory ,(SELECT COUNT(*) FROM person t WHERE t.category = p.category) AS q_rows_category ,p.age,LAG(age,1) OVER(PARTITION BY p.category,p.age ORDER BY p.category,p.age) 作为 prevAge ,LAG(age,1) OVER(PARTITION BY p.category,p.age ORDER BY p.category,p.age) as nextAge ,(SELECT COUNT(*) FROM person t WHERE t.category = p.category AND t.age = p.age) AS q_rows_age ,p.fullName 来自人 p) a 联合所有 选择'
类别 年龄 全名
',category,'',age,'',fullName,'
';
  • 4 - 结果
类别 年龄 全名
A 20 亚历山大
玛丽
25 一分钱
罗杰
B 20 卡伦
21 罗尼
25 彼得
  • 5 - HTML 框架
在此处粘贴数据! 正文>
猜你喜欢
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
  • 2011-01-14
  • 2016-03-17
相关资源
最近更新 更多