用于JQuery Datatables插件的服务器端过滤,以模仿内置的客户端过滤

时间:2011-08-11 14:52:33

标签: jquery filter server-side datatables

DataTables插件的客户端过滤(内置)非常好。它会根据您的搜索字词,在任何字段上逐字逐句过滤您的搜索结果。

提供的示例服务器端代码会针对任何字段搜索整个字符串。我该如何修改

$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 .= ')';
}

实现我正在寻找的目标?

到目前为止,我已尝试过以下内容:

$sWhere = "";
if ($_GET['sSearch'] != "") {
    $sWhere = "WHERE (";
    $words = explode(" ",$_GET['sSearch']);
    for ($i = 0; $i < count($aColumns); $i++) {
        for($j = 0; $j < count($words); $j++) {
            if($words[$j] != "") {
                $sWhere .= $aColumns[$i] . " LIKE '%" . mysql_real_escape_string($words[$j]) . "%' OR ";
            }
        }
    }
    $sWhere = substr_replace($sWhere, "", -3);
    $sWhere .= ')';
}

没有运气。我想我只需要遍历搜索字符串中的所有“单词”,然后针对这些单词搜索每一列。现在我正在失去逻辑。我正在搜索所有字段的所有字段,我只需要通过AND和OR对它们进行分组,如果我有下表

  |col1  |  col2  |  col3
  -----------------------
#1| aaa  | bbb    |  ccc
#2| aaa  | ddd    |  xxx
#3| hugo | aaa    |  rap

我搜索“aaa bbb”我只返回结果#1而不是全部三个。 我知道这很简单..但是我一直在绞尽脑汁这么多我迷失了自己。

1 个答案:

答案 0 :(得分:1)

这是我的新服务器端搜索...如果他们想在他们的DataTable上实现相同的功能,那就是其他任何人。

$sWhere = "";
if ($_GET['sSearch'] != "") {
    $sWhere = "WHERE (";
    $words = explode(" ",$_GET['sSearch']);
    for ($j = 0; $j < count($words); $j++) {

        if ($words[$j] != "") {
            $sWhere .= "(";
            for ($i = 0; $i < count($aColumns); $i++) {

                $sWhere .= $aColumns[$i] . " LIKE '%" . mysql_real_escape_string($words[$j]) . "%' OR ";

            }
            $sWhere = substr_replace($sWhere, "", -3);
            $sWhere .= ") AND ";
        }
    }
    $sWhere = substr_replace($sWhere, "", -4);
    $sWhere .= ')';
}