2013-05-01 74 views
0

嗨,我正在使用jquery的数据表插件,它工作正常时,我的数据是600左右,但现在我的数据是28000,数据表变得越来越慢加载它,是明镜一种方式,我可以使其更快地执行,这样它不会花费太多的时间来加载马新手在PHP,所以我只是KNW常见的语法。任何人都可以请帮我在这里 是我的代码如何使用php获取并将大量数据加载到jquery数据库中使用php

<script type="text/javascript" charset="utf-8"> 
    $(document).ready(function(){ 
     $('#datatables').dataTable({ 
      "sPaginationType":"full_numbers", 
      "aaSorting":[[2, "desc"]], 
      "bJQueryUI":true, 
      "sAjaxSource": "ajax.php" 
     }); 
    }) 

</script> 

<table id="datatables" class="display"> 
    <thead> 
     <tr> 
      <th>Srno.</th> 
      <th>Brno.</th> 
      <th>Name</th> 
      <th>Address</th> 
      <th>City</th> 
      <th>Pin</th> 
      <th>Mobile</th> 
      <th>Actions</th> 
     </tr> 
    </thead> 
    <tbody> 
    </tbody> 
    </table> 

here is ajax.php 
<?php 
require("includes/dbconnect.php"); 
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
* Easy set variables 
*/ 

/* Array of database columns which should be read and sent back to DataTables. Use a space where 
* you want to insert a non-database field (for example a counter or static image) 
*/ 
$aColumns = array('grno', 'brno', 'name', 'address', 'city', 'pin', 'mobile'); 

/* Indexed column (used for fast and accurate table cardinality) */ 
$sIndexColumn = "grno"; 

/* DB table to use */ 
$sTable = "mdb"; 

/* Database connection information */ 
$gaSql['user'] = "root"; 
$gaSql['password'] = "[email protected]"; 
$gaSql['db'] = "mdb"; 
$gaSql['server'] = "localhost"; 



/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
* If you just want to use the basic configuration for DataTables with PHP server-side, there is 
* no need to edit below this line 
*/ 

/* 
* MySQL connection 
*/ 
$gaSql['link'] = mysql_pconnect($gaSql['server'], $gaSql['user'], $gaSql['password']) or 
     die('Could not open connection to server'); 

mysql_select_db($gaSql['db'], $gaSql['link']) or 
     die('Could not select database ' . $gaSql['db']); 


/* 
* Paging 
*/ 
$sLimit = ""; 
if (isset($_GET['iDisplayStart']) && $_GET['iDisplayLength'] != '-1') { 
    $sLimit = "LIMIT " . mysql_real_escape_string($_GET['iDisplayStart']) . ", " . 
      mysql_real_escape_string($_GET['iDisplayLength']); 
} 


/* 
* Ordering 
*/ 
$sOrder = ""; 
if (isset($_GET['iSortCol_0'])) { 
    $sOrder = "ORDER BY "; 
    for ($i = 0; $i < intval($_GET['iSortingCols']); $i++) { 
     if ($_GET['bSortable_' . intval($_GET['iSortCol_' . $i])] == "true") { 
      $sOrder .= $aColumns[intval($_GET['iSortCol_' . $i])] . " 
        " . mysql_real_escape_string($_GET['sSortDir_' . $i]) . ", "; 
     } 
    } 

    $sOrder = substr_replace($sOrder, "", -2); 
    if ($sOrder == "ORDER BY") { 
     $sOrder = ""; 
    } 
} 


/* 
* Filtering 
* NOTE this does not match the built-in DataTables filtering which does it 
* word by word on any field. It's possible to do here, but concerned about efficiency 
* on very large tables, and MySQL's regex functionality is very limited 
*/ 
$sWhere = ""; 
if (isset($_GET['sSearch']) && $_GET['sSearch'] != "") { 
    $sWhere = "WHERE ("; 
    for ($i = 0; $i < count($aColumns); $i++) { 
     $sWhere .= $aColumns[$i] . " LIKE '%" . mysql_real_escape_string($_GET['sSearch']) . "%' OR "; 
    } 
    $sWhere = substr_replace($sWhere, "", -3); 
    $sWhere .= ')'; 
} 

/* Individual column filtering */ 
for ($i = 0; $i < count($aColumns); $i++) { 
    if (isset($_GET['bSearchable_' . $i]) && $_GET['bSearchable_' . $i] == "true" && $_GET['sSearch_' . $i] != '') { 
     if ($sWhere == "") { 
      $sWhere = "WHERE "; 
     } else { 
      $sWhere .= " AND "; 
     } 
     $sWhere .= $aColumns[$i] . " LIKE '%" . mysql_real_escape_string($_GET['sSearch_' . $i]) . "%' "; 
    } 
} 


/* 
* SQL queries 
* Get data to display 
*/ 
$sQuery = " 
     SELECT SQL_CALC_FOUND_ROWS " . str_replace(" , ", " ", implode(", ", $aColumns)) . " 
     FROM $sTable 
     $sWhere 
     $sOrder 
     $sLimit 
    "; 
$rResult = mysql_query($sQuery, $gaSql['link']) or die(mysql_error()); 

/* Data set length after filtering */ 
$sQuery = " 
     SELECT FOUND_ROWS() 
    "; 
$rResultFilterTotal = mysql_query($sQuery, $gaSql['link']) or die(mysql_error()); 
$aResultFilterTotal = mysql_fetch_array($rResultFilterTotal); 
$iFilteredTotal = $aResultFilterTotal[0]; 

/* Total data set length */ 
$sQuery = " 
     SELECT COUNT(" . $sIndexColumn . ") 
     FROM $sTable 
    "; 
$rResultTotal = mysql_query($sQuery, $gaSql['link']) or die(mysql_error()); 
$aResultTotal = mysql_fetch_array($rResultTotal); 
$iTotal = $aResultTotal[0]; 


/* 
* Output 
*/ 
$output = array(
    //"sEcho" => intval($_GET['sEcho']), 
    "sEcho" => intval($_GET['sEcho']), 
    "iTotalRecords" => $iTotal, 
    "iTotalDisplayRecords" => $iFilteredTotal, 
    "aaData" => array() 
); 

while ($aRow = mysql_fetch_array($rResult)) { 
    $row = array(); 
    for ($i = 0; $i < count($aColumns); $i++) { 
     if ($aColumns[$i] == "version") { 
      /* Special output formatting for 'version' column */ 
      $row[] = ($aRow[$aColumns[$i]] == "0") ? '-' : $aRow[$aColumns[$i]]; 
     } elseif ($aColumns[$i] === "vouchno") { 

      $row[] = "<a href=\"invoice.php?ORDERID=" . $aRow[$aColumns[$i]] . "\" target=\"_blank\" title=\"View Invoice: " . $aRow[$aColumns[$i]] . "\">" . $aRow[$aColumns[$i]] . "</a><a href=\"invoice.php?action=delete&ORDERID=" . $aRow[$aColumns[$i]] . "\"onClick=\"return confirm('Are you sure you want to delete?')\"><img border=\"0\" src=\"../images/icons/trash-can-delete.png\" width=\"16\" height=\"16\"></a>"; 
     } else if ($aColumns[$i] != ' ') { 
      /* General output */ 
      $row[] = $aRow[$aColumns[$i]]; 
     } 
    } 
    $output['aaData'][] = $row; 
} 

echo json_encode($output); 
?> 
+0

难道你不希望这个页面上添加分页? Becasue在寻呼的情况下,你需要混帐只有少数记录和performacne将远远优于一次加载完整的内容。 – 2013-05-01 07:58:04

+0

但数据表本身会使调页仪? – user2274075 2013-05-01 08:05:04

+0

没有在分页实现的情况下,你需要设置的范围内选择查询。让说你想显示每页所以只有100行会在同一时间内fatched 100行,你需要让你的查询与数据范围的参数。 – 2013-05-01 08:15:40

回答

0

,你会想看看this

而不是使用一个文件你所创造的输出JSON的PHP文件:

header('Content-type: application/json'); 

$result = mysql_query("SELECT `vouchno`, grno, brno, `name`, `address`, `city`, `pin`, mobile FROM mdb") or die(mysql_error()); 
$response = array(); 
// mysql_fetch_assoc is faster the mysql_fetch_array 
while ($row = mysql_fetch_assoc($result)) { 
    $response [] = $row; 
} 

echo json_encode($response); 

当然,你需要发现其余的你自己。

+0

但先生我dntknw hw做到这一点 – user2274075 2013-05-01 08:00:49

+0

你可以只是帮助显示我应该如何写一个PHP文件将输出一个JSON? – user2274075 2013-05-01 08:02:16