如何使用php获取和加载大量数据到jquery数据表中

时间:2013-05-01 07:49:41

标签: php jquery mysql datatables

here is the image of my error嗨,我正在使用jquery的datatable插件,当我的数据大约为600但它现在我的数据是28000并且数据表加载速度变慢时,它工作得很好所以我可以这样做使其执行速度更快,以便它不会花费太多时间在PHP中加载ma新手,所以我只知道常见的语法。谁能帮帮我吗 这是我的代码

<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'] = "rajF@1998";
$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);
?>

2 个答案:

答案 0 :(得分:2)

尝试从他们的数据表网站上考虑Datatable Server Side Processing example

答案 1 :(得分:0)

如果您使用this jQuery plugin,则需要查看this

而不是使用文件创建一个php文件输出json:

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);

当然,你需要发现自己的休息。