2013-12-09 255 views
0

我正在使用Datables创建DataTables JQuery.I能够查看我的数据正常。我遇到的问题是我无法搜索表,当我有我的查询GROUP BY。我收到错误1064.任何输入赞赏。DataTables PHP服务器处理

<?php 


    $aColumns = array('accountname', 'accountAddress1', 'accountAddress2', 'accountCity', 'accountState', 'accountZip', 'accountphone', 'accountemail', 'accountWebSite', 'accountFax','tasktitle'); 



    $sIndexColumn = "accountname"; 
    $sTable = "accounts"; 
    $sJoin = "LEFT JOIN tasks on accounts.accountname = tasks.taskresource GROUP BY accounts.accountname"; 
    $gaSql['user']  = "xxxx"; 
    $gaSql['password'] = "xxxx"; 
    $gaSql['db']   = "xxx"; 
    $gaSql['server']  = "localhost"; 

    /* 
    * Local functions 
    */ 

    function fatal_error ($sErrorMessage = '') 
    { 
    header($_SERVER['SERVER_PROTOCOL'] .' 500 Internal Server Error'); 
    die($sErrorMessage); 
    } 

    /* 
    * MySQL connection 
    */ 
    if (! $gaSql['link'] = mysql_pconnect($gaSql['server'], $gaSql['user'], $gaSql['password'] )) 
    { 
    fatal_error('Could not open connection to server'); 
    } 

    if (! mysql_select_db($gaSql['db'], $gaSql['link'])) 
    { 
    fatal_error('Could not select database '); 
    } 


    /* 
    * Paging 
    */ 
    $sLimit = ""; 
    if (isset($_GET['iDisplayStart']) && $_GET['iDisplayLength'] != '-1') 
    { 
    $sLimit = "LIMIT ".intval($_GET['iDisplayStart']).", ". 
     intval($_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]) ]."` ". 
      ($_GET['sSortDir_'.$i]==='asc' ? 'asc' : 'desc') .", "; 
     } 
    } 

    $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 
    $sJoin 
    $sWhere 
    $sOrder 
    $sLimit 
    "; 
    // $sQuery2 = " 
    // SELECT SQL_CALC_FOUND_ROWS `".str_replace(" , ", " ", implode("`, `", $aColumns))."` 
    // FROM $sTable 
    // $sWhere 
    // $sOrder 
    // $sLimit 
    // "; 
    $rResult = mysql_query($sQuery, $gaSql['link']) or fatal_error('MySQL Error: ' . mysql_error()); 

    /* Data set length after filtering */ 
    $sQuery = " 
    SELECT FOUND_ROWS() 
    "; 
    $rResultFilterTotal = mysql_query($sQuery, $gaSql['link']) or fatal_error('MySQL Error: ' . mysql_errno()); 
    $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 fatal_error('MySQL Error: ' . mysql_errno()); 
    $aResultTotal = mysql_fetch_array($rResultTotal); 
    $iTotal = $aResultTotal[0]; 


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

    while ($aRow = mysql_fetch_array($rResult)) 
    { 
    $row = array(); 
    //$row[] = $OpenAccountTasks; 
    $row[] = '<img src="assets/advanced-datatable/examples/examples_support/details_open.png">'; 
    for ($i=0 ; $i<count($aColumns) ; $i++) 
    { 
     if ($aColumns[$i] == "accountname") 
     { 
     /* Special output formatting for 'version' column */ 
     //$row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ]; 
     $row[] = '<a href="AccountProfile.php?acctname=' .$aRow[ $aColumns[$i] ].'">' . $aRow[$aColumns[$i]] . '</a>'; 
     } 
     else if ($aColumns[$i] =="tasktitle") 
     { 
     $taskRow = mysql_query("SELECT count(*) FROM tasks WHERE taskresource = '$aRow[accountname]' && taskstatus = 'Active'"); 
     $taskCountResult = mysql_result($taskRow, 0); 
     if ($taskCountResult == 0) { 
        $row[] = '<span class="label label-success label-mini">'.$taskCountResult.'</span>'; 
     } 
     else{ 
        $row[] = '<span class="label label-danger label-mini">'.$taskCountResult.'</span>'; 
     } 
     } 
     else if ($aColumns[$i] != ' ') 
     { 
     /* General output */ 
     $row[] = $aRow[ $aColumns[$i] ]; 
     } 
    } 
    $output['aaData'][] = $row; 
    } 

    echo json_encode($output); 
?> 

回答

相关问题