我有一个 sql 视图,它返回超过 10,000 条记录,大约 120 列(荒谬,我知道)。
视图数据是使用 Zend_Db_Table_Abstract 对象从 PHP 中的数据库收集的。我们有一个报表控制器,它执行 fetchAll(这显然会创建一个庞大的数组)并将该数组存储在一个视图对象中。接下来我们有一个视图脚本,它遍历数组并回显一个 json 格式的数组。
这很慢www。渲染此报告需要超过 1 分钟,我该怎么做才能加快速度?
请记住,我对这个项目非常陌生,对 Zend 和 PHP 知之甚少。此外,由于数据保护等原因,我不能放弃太多。
如果您可以询问您需要什么来帮助您收集图片,那就太好了。但基本上这就是脚本的作用:
报告控制器:
Setup some basic json report data (for data tables)
$this->view->report_data = fetchALL($oSelect);
查看脚本:
Output the basic json stuff, then:
"report_data": [
<?php
for($i = 0; $i < count($this->report_data); $i++){
echo "[";
foreach($this->columns as $k=>$col){
echo '"'. $this->escape($this->report_data[$i][$col]) .'"';
if($k < count($this->columns) -1 ){
echo ',';
}
}
echo "]";
if($i < count($this->report_data) -1){
echo ",";
}
echo"\n";
}
?> ]
因此,在做了一些研究之后,我收集到我可以使用 fetch() 而不是 fetchAll() 以便一次获取 1 行,以避免庞大的数组。但是我尝试使用 fetch() 并收到此错误:
调用未定义的方法Zend_Db_Table_Abstract::fetch()
所以现在我很沮丧。
我的想法是获取每一行并输出 Json 格式的每一行,但是我真的不知道如何在报表控制器/视图场景中执行此操作。我是否必须摆脱视图脚本而只使用控制器来输出数据?
无论如何为什么不起作用fetch()
,我实际上也无法在文档中看到它,好吧有一些数组function _fetch()
任何帮助将不胜感激,如果您需要更多信息,请询问。谢谢