Фильтрация на стороне сервера для плагина JQuery Datatables для имитации встроенной фильтрации на стороне клиента - PullRequest
0 голосов
/ 11 августа 2011

Фильтрация на стороне клиента (встроенная) для плагина 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 Ответ

1 голос
/ 11 августа 2011

вот мой новый поиск на стороне сервера ... для всех, кто хотел бы реализовать те же функции в своей 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 .= ')';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...