我一直在努力寻找处理显示子数据的最佳,最有效的方法。在我的具体情况下,我使用的是PHP和MySQL,但我觉得这更像是一种"通常用任何语言"有点交易。
我的两个想法是(对于这个例子,我将列出发票及其订单项)
将子数据(发票项目)与主数据(发票)联系起来只有一个查询我的问题是,我说发票上有500个订单项(可能不太现实,但是事情发生了),然后我会将整个发票数据从MySQL服务器发送到我的PHP脚本500次,这听起来很荒谬,因为我只需要一次。
第二个选项是,在循环显示发票并显示整个发票数据时,选择发票的订单项。当然,这现在更多次联系数据库500.
是否还有其他选项可以处理具有逻辑意义的数据(使用给定的架构)?我几乎100%肯定有,因为我无法相信我是第一个考虑这个问题的人,但我认为我很难找到正确的方法搜索有关此主题的更多信息。
答案 0 :(得分:1)
将子数据(发票项目)与主数据(发票)相关联,只有一个查询
这是处理此要求的传统方式。它确实处理冗余数据,并且存在一些开销。
但是
大多数人只是在这种应用程序中检索冗余数据。像Crystal Reports这样的程序产品可以做到这一点。
如果它只是为你工作,你可以为你的主记录检索并保存一个结果集......也许是这样的。
SELECT master_id, name, address, whatever
FROM master m
WHERE m.whatever = whatever
ORDER BY whatever
然后,通过master_id
将它们放入关联数组中。
然后,检索详细记录。
SELECT d.master_id, d.detail_id, d.item, d.unit, d.quantity
FROM detail d
JOIN master m ON d.master_id = m.master_id
WHERE m.whatever = whatever
ORDER BY d.master_id, d.detail_id, whatever
您将获得一个结果集,其中包含标有master_id
值的所有相关明细记录(发票项)。你可以在php程序中将它们与主记录进行匹配。您基本上是在加入应用程序代码。
如果所有这些听起来像是脖子上的痛苦......只需要获取冗余数据并完成项目。如果必须,您可以随时优化。