mysql 层次递归查询
mysql hierarchial recursive query
我构建 PHP 网页已经有一段时间了,但我对 MySQL 数据库不是很熟悉。我已经彻底搜索了像我这样的问题的解决方案,但没有任何运气(尽管回答了类似的问题,但我无法弄清楚如何实施所提供的解决方案)。
我有 5 个表,三级层次结构如下:
Clients (id, name, ...)
↳ Projects (id, client_id, name, ...)
↳ Contacts (id, project_id, name, ...)
↳ Files (id, project_id, name, ...)
↳ Events (id, project_id, name, ...)
我正在尝试实现一个递归查询:如果我提供任何级别的 ID(指定 ID 所属的级别),它应该 return 父记录和子记录的级别在树结构中。
例如:我有一个项目的 ID,所以我想 return 项目所属的客户(父),以及项目的联系人、文件和事件(子)。或者如果我有一个Event的ID,那么我想输出Project(parent),Client(parent parent),加上Contacts和Files(与Events在同一级别)。
重点是查看所选项目的完整历史记录。这甚至可以通过一个查询来实现......?欢迎和赞赏任何建议!
这样的查询将 return 整个数据集:
SELECT columns
, I
, actually
, want
FROM clients c
LEFT
JOIN projects p
ON p.fk = c.pk
LEFT
JOIN
( SELECT 'contact' type, common, columns FROM contacts
UNION
SELECT 'file', etc
UNION etc
) x
ON x.fk = p.pk;
您可以轻松地将 WHERE 子句附加到此,或者,如果数据集不是很大,只需在 JavaScript 或类似方法中处理过滤。请注意,您当前的设计具有巨大冗余的潜力!
我构建 PHP 网页已经有一段时间了,但我对 MySQL 数据库不是很熟悉。我已经彻底搜索了像我这样的问题的解决方案,但没有任何运气(尽管回答了类似的问题,但我无法弄清楚如何实施所提供的解决方案)。
我有 5 个表,三级层次结构如下:
Clients (id, name, ...)
↳ Projects (id, client_id, name, ...)
↳ Contacts (id, project_id, name, ...)
↳ Files (id, project_id, name, ...)
↳ Events (id, project_id, name, ...)
我正在尝试实现一个递归查询:如果我提供任何级别的 ID(指定 ID 所属的级别),它应该 return 父记录和子记录的级别在树结构中。
例如:我有一个项目的 ID,所以我想 return 项目所属的客户(父),以及项目的联系人、文件和事件(子)。或者如果我有一个Event的ID,那么我想输出Project(parent),Client(parent parent),加上Contacts和Files(与Events在同一级别)。
重点是查看所选项目的完整历史记录。这甚至可以通过一个查询来实现......?欢迎和赞赏任何建议!
这样的查询将 return 整个数据集:
SELECT columns
, I
, actually
, want
FROM clients c
LEFT
JOIN projects p
ON p.fk = c.pk
LEFT
JOIN
( SELECT 'contact' type, common, columns FROM contacts
UNION
SELECT 'file', etc
UNION etc
) x
ON x.fk = p.pk;
您可以轻松地将 WHERE 子句附加到此,或者,如果数据集不是很大,只需在 JavaScript 或类似方法中处理过滤。请注意,您当前的设计具有巨大冗余的潜力!