我一直在构建PHP网页已有一段时间了,但我并不熟悉MySQL数据库。我已经彻底搜索了像我这样的问题的解决方案,但没有任何运气(尽管有类似的问题得到解答,我无法弄清楚如何实现所提供的解决方案)。
我在3级分层结构中有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所属的级别),它应该返回树级结构中父级和子级记录的级别。
例如:我有一个Project的ID,所以我想返回Project所属的Client(父级),以及Project的Contacts,Files和Events(子级)。或者,如果我有一个事件的ID,那么我想输出项目(父),客户(父母),以及联系人和文件(与事件处于同一级别)。
重点是查看所选项目的完整历史记录。一个查询是否可以实现这一点......?任何建议都欢迎和赞赏!
答案 0 :(得分:0)
这样的查询将返回整个数据集:
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或类似的过滤。请注意,您当前的设计有可能产生巨大的冗余!