php - MySQL 自定义报告策略

标签 php mysql reporting

我们有一个 PHP/MySQL 应用程序,用户可以在其中创建自己的“数据库”,这可能会变得相当复杂。在 MySQL 上,它的结构为一组属性表,其中包含 record_idfield_idfield_value 等列。我很清楚这种结构的优缺点,所以请考虑这不会改变。

我们已经拥有一个自定义的高级搜索系统,用户可以通过组合任何字段的条件、在字段之间和字段内使用 bool 运算符来查询这些数据库。

现在我们必须实现一个报告功能,让他们能够制作自己的报告。这可能包括一对多关系的多组数据。

例如,考虑一个“人员”数据库,其中每个人可能有多个联系人和多个地址。例如,通过我们的自定义搜索,可以轻松列出所有在美国出生的人。但我还想在结果集中显示每个人的所有联系人和地址。

我可以看到两种可能的解决方案:

  1. 使用多个 JOIN 语句的单个 SQL 查询来获取所有数据。在这种情况下,每个人可能有多行,具体取决于他们有多少联系人和地址,并且我必须在显示(或组织)结果的 PHP 循环上处理该问题。考虑到报告可能具有无限数量的一对多信息 block (在我的示例中,我只有两个,地址和联系人),恐怕这会变得太复杂。

  2. 对于每个人,运行“n”个附加查询,每个查询对应一对多数据的每个 block 。在我的示例中,这将是一个针对联系人的查询,另一个针对地址的查询。这种方法可能会导致运行大量查询来构建整个报告。

我知道这两种方法都有其缺点,但是在这种情况下是否有“推荐”的方法?

最佳答案

这当然取决于您认为检索所有数据所需的查询量。从性能角度来看,建议执行大型联接,因为它的处理效率比多个小型查询要高得多。

您会发现使用第二种方法生成大型报表比使用第一种方法花费的时间更长。

关于php - MySQL 自定义报告策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9195282/

相关文章:

php - 尝试查看 MySQL 表时出现 500 错误

c# - MS 报告 (rdlc) 改变车身尺寸

php - 使用 PHP 和 mysql 进行搜索

php - ZF2 处理文件上传。如何访问上传的文件?

php - Jquery 倒计时器与 php 未按预期执行

php - Mysql、php和时间差异

mysql - 如何从表中删除不重复的行?

php - 将 MySQL 数据库显示为数组

git - 将 VSTS/Azure DevOps 中所有提交详细信息的列表导出到文件中?

visual-studio - Visual Studio 2010 中缺少商业智能项目类型