【问题标题】:How do I select specific rows in a server side jQuery data table?如何在服务器端 jQuery 数据表中选择特定行?
【发布时间】:2012-02-27 21:37:38
【问题描述】:

我在 php 中使用 jQuery Data Tables 服务器端示例来抓取表中的记录,然后显示它们,如下例所示:

http://www.datatables.net/release-datatables/examples/data_sources/server_side.html

我的问题是:如何根据我的 sql 中的 WHERE 子句仅获取特定记录?

请注意,上面的示例获取指定表中的所有记录,允许我们选择列...我们如何做同样的但只选择符合特定条件的某些行...即在示例中,加载数据表时默认仅显示 Firefox 浏览器。以下是通过 jquery 调用以填充数据表的 php 脚本中的代码...我实际上正在尝试修改此脚本以仅获取特定行,即行 WHERE browser like 'Firefox%' ...

 * 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 ( $_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 ( $_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];

【问题讨论】:

    标签: javascript jquery datatables


    【解决方案1】:

    如果您遵循 php 中的 CRUD 示例,$_GET 键匹配数据表的选项设置键,例如“sSearch”用于您的位置,“iDisplayStart”和“iDisplayLength”用于限制等

    【讨论】:

    • 我尝试使用 where 子句的条件修改 $sWhere 变量...在某些情况下我成功了,而在其他情况下我得到了 json 格式错误...所以我在解决这个问题之间犹豫不决通过 jquery 代码和回调与提取数据并搜索数据的实际 php 脚本(因此在适当位置修改 $sWhere 变量)发出问题...
    【解决方案2】:

    我使用 .NET 并且对 php 不太熟悉,因此我无法完全满足您的需求,但我将向您展示如何接近您希望自己解决其余部分的点。

    fnServerData 事件将允许您发布自己的搜索参数 - 或者更具体地说,aoData。使用 aoData.push() 方法,您可以指定参数的名称及其值。在此示例中,我将选择的日期发送到我的查询中,我将调用该变量“日期”。

    "fnServerData": function (sSource, aoData, fnCallback) {
                    /* Add some extra data to the sender */
                    aoData.push({ "name": "date", "value": $('#datepicker').val() });
                    $.getJSON(sSource, aoData, function (json) {
                        /* Do whatever additional processing you want on the callback, then tell DataTables */
                        fnCallback(json);
                    });
    

    然后,DataTables 将发送一个 POST 到带有一堆参数的 URL,例如 server_processing.php?sEcho=1&iColumns=21&sColumns=&iDisplayStart=0&iDisplayLength=50 与 &date=02%2F27%2F2012 最后(今天的日期 URL编码)。

    从您的 php 页面中,您应该能够使用我相信的 $_GET['date'] 函数以及它默认发送的其他键来提取该参数。不过,您需要将查询结果作为 JSON 对象返回,如您所链接页面底部所见。

    【讨论】:

    • 好的,你能把它应用到下面吗:live.datatables.net/#javascript,html,live 假设,我们想在默认情况下只用 firefox 浏览器加载数据表...你能检查上面的链接并发布代码吗? ..(对此我完全陌生)
    • 不幸的是,this 是我能得到的最接近的,但并不多,因为这不会让你在其中添加 php 代码。我并没有居高临下的意思,但是您熟悉如何创建 JSON 对象和查询数据库吗?
    • 几乎是我的朋友...两天前我决定学习jquery和数据表:(
    • 那将是您需要的问题。 SQL 查询不应该花太长时间来学习,我相信你可以在这里找到很多关于如何在 PHP 中创建 JSON 对象的帮助,但这远远超出了这个问题的范围。
    • 查看服务器端示例(我发布)运行一个 php 脚本,该脚本控制要抓取的数据的所有参数...我的 sql 非常精致,但 php 脚本似乎是为了抓取表中的所有行...
    【解决方案3】:

    我通过在服务器端 php 脚本中修改我的 sql 找到了一个解决方案,该脚本只需相应地修改 $sWhere 变量即可获取数据。在这种情况下,我从我的 jquery 脚本传递一个 GET 变量 $userid:

              $userid = $_GET['userid'];
        /* 
     * 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 = "WHERE userid=$userid";
    if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" )
    {
        $sWhere = "WHERE userid=$userid and (";
        for ( $i=0 ; $i<count($aColumns) ; $i++ )
        {
            $sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR ";
        }
        $sWhere = substr_replace( $sWhere, "", -3 );
        $sWhere .= ')';
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-01
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 2019-12-17
      相关资源
      最近更新 更多