如何解决Codeigniter中的DataTables显示数百万行数据
我在codeigniter中创建了一个DataTable,它已经可以处理少量数据,但是我想用100万行数据运行该项目。不幸的是,它无法处理如此大量的数据。
我应该在下面的代码中添加/更改什么? 我正在使用codeigniter,oracle数据库和odbc驱动程序
谢谢!
//JavaScript
<script>
$('#user-list').DataTable({
"processing": true,dom: 'Bfrtip',buttons: [
'excel'
],"ajax": {
url : "<?php echo base_url(); ?>Reports/get_User,type : 'GET'
},"aoColumns": [
{ "data": "ID" },{ "data": "FirstName" },{ "data": "LastName" },{ "data": "Address"},{ "data": "Email" },]
});
</script>
//html
<table id="user-list" class="table table-bordered table-striped table-hover">
<thead>
<tr>
<th>ID</th>
<th>First name</th>
<th>Last name</th>
<th>Address</th>
<th>Email</th>
</tr>
</thead>
</table>
//controller
public function get_User()
{
$draw = intval($this->input->get("draw"));
$start = intval($this->input->get("start"));
$length = intval($this->input->get("length"));
$query =$this->db->query("SELECT * FROM users");
$data = [];
foreach($query->result() as $r) {
$data[] = array(
$r-ID
$r-FirstName,$r-LastName,$r-Address,$r-Email,$r_tab[] = $r
);
}
$result = array(
"draw" => $draw,"recordsTotal" => $query->num_rows(),"recordsFiltered" => $query->num_rows(),"data" => $data,"data" => $r_tab
);
echo json_encode($result);
exit();
}
解决方法
您通过尝试在内存中加载大量数据而使自己的服务器崩溃。
选中此server-side processing (5,000,000 rows) DataTable sample-不幸的是,此示例未使用真实的数据库连接来检索数据,但仍具有参考价值。
本质上,您需要更改AJAX请求以包括offset
和limit
,这些值需要添加到查询中才能从数据库中检索仅要显示的数据而不是整个桌子。
尝试一下:
- 更改您的AJAX调用,如下所示:
scrollY: 200,"ajax": function ( data,callback,settings ) {
url : "<?php echo base_url(); ?>Reports/get_User/" + data.start + "/" + data.length,type : 'GET'
},
- 这样更改您的控制器(您可能还需要调整路线):
// Be sure to validate that $offset and $limit are valid numeric values (integer,positive,limit does not exceed a certain value,etc)
public function get_User($offset,$limit)
{
$limit = (int) $limit;
$offset = (int) $offset;
...
// Not sure about the "LIMIT" syntax for Oracle,please look it up
$query =$this->db->query("SELECT * FROM users LIMIT $offset,$limit");
...
注意:这些代码段并不完美(我以前没有使用过DataTable),但是它们应该可以帮助您走上正确的轨道。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。