数据表和缓慢的Ajax源数据

时间:2016-06-17 14:03:24

标签: php jquery ajax datatable

我使用数据表脚本来填充大量行的表格......

调用datatable和jquery就像这样

<table id="table" class="table table-bordered table-striped">
 <thead>
  <tr>
    <th>column 1</th>
    <th>column 2</th>
  </tr>
 </thead>
</table>

$(document).ready(function() {
    $('#example').DataTable( {
        "ajax": 'script.php'
    } );
} );

这是SCRIPT.PHP的示例,用于从mysql数据库中读取数据

$data = array();

$sql = "SELECT a, b FROM database";
$res = $db->query($sql);
while ($f = $res->fetch()) {
  $nestedData=array(); 
  $nestedData[] = $f['a'];
  $nestedData[] = $f['b'];
  $data[] = $nestedData;
}
$json_data = array( "data" => $data );
echo json_encode($json_data);

问题在于,通过这种方式,我必须从数据库加载数据(在大型数据库上,等待很长时间),然后表填充,但我想填充从数据库读取的每一行的数据。

这怎么可能?

2 个答案:

答案 0 :(得分:2)

我只能想到3种方式:

  1. 为您的表创建一个寻呼机,以便一次获取/显示10或20行
  2. 制作树并对数据进行分类(例如:http://www.trirand.com/jqgridwiki/lib/exe/fetch.php?media=wiki:treegrid.png
  3. 如果不经常修改数据,则可以创建缓存。 (将生成的json保存在文件中并每10分钟/小时刷新一次)

答案 1 :(得分:2)

解决方案1:限制结果数

您可以将结果限制为仅打印最新或活动状态,如:

$sql = "SELECT a, b FROM database ORDER BY id DESC LIMIT 0,50 ";

或创建一个“Created_Date”列,仅在上周获取:

$sql = "SELECT a, b FROM database WHERE Created_Date >= DATEADD(day,-7, GETDATE())";

$json_data = array( "data" => $db->query($sql)->fetchAll( PDO::FETCH_ASSOC ));
echo json_encode($json_data);

解决方案2:使用搜索解决方案

搜索解决方案提供:分布式索引,复制和负载均衡查询

喜欢:

  • 的Lucene / Solr的
  • ElasticSearch
  • groonga
  • 斯芬克斯
  • ...