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 或类似方法中处理过滤。请注意,您当前的设计具有巨大冗余的潜力!