我们有一个PHP / MySQL应用程序,用户可以在其中创建自己的“数据库”,这可能会变得非常复杂。在MySQL上,它被构造为一组属性表,并带有record_id
,field_id
和field_value
之类的列。我很清楚这种结构的利弊,因此请考虑这并没有改变。
我们已经有一个定制的高级搜索系统,用户可以在字段之间和字段内部使用布尔运算符,通过组合来自任何字段的条件来查询那些数据库。
现在,我们必须实现报告功能,他们才能制作自己的报告。这可能包括一对多关系上的多组数据。
例如,考虑一个“人”数据库,其中每个人可能有多个联系人和多个地址。例如,通过我们的自定义搜索,可以轻松列出所有在美国出生的人。但我也想在结果集中显示每个人的所有联系方式和地址。
我可以看到两种可能的解决方案:
具有多个JOIN
语句的单个SQL查询可获取所有数据。在这种情况下,我可能每个人都有多行,具体取决于他们有多少联系人和地址,而我不得不在显示(或组织)结果的PHP循环中处理这些行。考虑到报告可能具有无限数量的一对多信息块,我担心这可能会变得太复杂(在我的示例中,我只有两个地址和联系人)。
对于每个人,运行“ n”个附加查询,每个一对一数据查询。在我的示例中,这将是对联系人的一个查询,而对地址的另一个查询。这种方法可能导致要运行大量查询才能构建整个报告。
我知道这两种方法都有其缺点,但是在这种情况下是否存在“推荐”的方式?
最佳答案
这当然取决于您认为要检索所有数据必须进行的查询数量。从性能的角度来看,建议执行大型联接,因为它可以比多个小型查询更有效地处理。
您会发现,使用第二种方法比使用第一种方法花费较大的时间。
关于php - MySQL自定义报告策略,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9195282/