【发布时间】:2012-02-08 14:30:49
【问题描述】:
我们有一个 PHP/MySQL 应用程序,用户可以在其中创建自己的“数据库”,这可能会变得相当复杂。在 MySQL 上,它被构造为一组属性表,包含 record_id、field_id 和 field_value 等列。我很清楚这种结构的利弊,所以请认为这不会改变。
我们已经有一个自定义的高级搜索系统,用户可以通过组合来自任何字段的条件,在字段之间和字段内使用布尔运算符来查询这些数据库。
现在我们必须实现一个报告功能,让他们能够制作自己的报告。这可能包括关于一对多关系的多组数据。
例如,考虑一个“人”数据库,其中每个人可能有多个联系人和多个地址。例如,通过我们的自定义搜索,可以轻松列出所有出生在美国的人。但我还想在结果集中显示每个人的所有联系人和地址。
我可以看到两种可能的解决方案:
带有多个
JOIN语句的单个 SQL 查询来获取所有数据。在这种情况下,每个人可能有多行,具体取决于他们有多少联系人和地址,我必须在显示(或组织)结果的 PHP 循环中处理这些问题。恐怕这会变得过于复杂,考虑到一份报告可能包含无限数量的一对多信息块(在我的示例中,我只有两个,地址和联系人)。对于每个人,运行“n”个附加查询,一个用于一对多数据的每个块。在我的示例中,这将是一个联系人查询,另一个是地址查询。这种方法可能会导致运行大量查询来构建整个报告。
我知道这两种方法都有其缺点,但是有没有“推荐”的方法来处理这种情况?
【问题讨论】: