我有一个报告和统计应用程序,它以基本表格格式显示各种查询结果。在报告结果页面的底部是用户可以将他们正在查看的报告结果下载到CSV文件的选项。与在线银行类似的功能,您可以在其中查看银行交易,然后可选择将交易历史记录下载到csv。
这样做的最佳做法是什么?
一个。一个下载按钮,触发报表查询重新运行,然后流式传输到csv下载文件。
或
湾首次运行查询并在视图中呈现时,控制器会将报表对象保存在会话变量中。因此,下载按钮从会话变量下载到报告对象,而不必重新运行查询。
我看到选项B的好处是双重的。 1.报告查询不必重新运行,因此数据库负载较小。 2.从会话变量下载的报告与报告结果中显示的报告完全匹配。使用选项a,如果在查看报告的时间与触发下载链接的时间之间存在数据更新,则下载的报告可能与正在查看的报告不同。
如果使用会话变量方法,是否存在任何风险或弊端?
提前感谢任何意见或指导。
答案 0 :(得分:0)
你总结了要考虑得很好的问题。最后,这是你必须做出的权衡。但请注意,您无法将{MySQL}等资源存储在$_SESSION
中(我不确定您引用的“报告对象”是否是自编报告类的实际对象,或者您是否指的是查询结果从数据库中获得)。我个人更喜欢选项B,因为它保证不会提供与应用程序中可见的结果不同的结果。