数据表从服务器端处理在客户端搜索数据


Datatables search data on client-side from a server-side processing

我几乎每天都在寻找这个问题,但我找不到正确的答案。我的问题是:

https://www.datatables.net/examples/data_sources/server_side.html

如果你用25 Apr搜索日期,这不起作用,但如果你搜索04-25,它可以。

在我当前的程序中,可搜索的是数据id,而不是返回值。

现在我希望表中的所有数据都是可搜索的。怎么做呢?提前谢谢。

这是我的服务器端脚本

$table = 'tracks_tb';
// Table's primary key
$primaryKey = 'track_id';
$columns = array(
    array('db' => '`t`.`track_id`', 
          'dt' => 0, 
          'formatter' => function($a){
              return '<a href="tracks-view.php?id='.$a.'">'.$a.'</a>';
          },
          'field' => 'track_id'
    ),
    array('db' => '`t`.`upc`', 
          'dt' => 1, 
          'field' => 'upc'
    ),
    array('db' => '`t`.`isrc`', 
          'dt' => 2,       
          'field' => 'isrc'
    ),
    array('db' => '`t`.`tracktitle`', 
          'dt' => 3, 
          'field' => 'tracktitle'
    ),
    array('db' => '`t`.`artist`', 
          'dt' => 4,
          'formatter' => function($a){
              if($a !=''){
                  $ab = explode(',',$a);
                  $artist ="";
                  $db = new Database();
                  $db->connect();
                  foreach ($ab as $artindex => $artvalue) {
                      $q_a ='SELECT fname FROM rartist WHERE id = '.$artvalue;
                      $r_a = $db->query($q_a);
                      $a_a = $db->fetch_array_assoc($r_a);
                      $a_id = $artvalue;
                      $a_name = $a_a['fname'];
                      if(end($ab)==$artvalue){
                          $artist .= '<span>'.$a_name.'</span>';
                      } else {
                          $artist .= '<span>'.$a_name.'</span>, ';
                      }
                  }
                  return $artist;
              } else {
                  return $artist='';
              }
          },
          'field' => 'artist'
    ),
    array('db' => '`t`.`publisher`', 
          'dt' => 5,
          'formatter' => function($p){
              if($p !=''){
                  $aa = explode(',',$p);
                  $publisher ="";
                  $db = new Database();
                  $db->connect();
                  foreach ($aa as $pubindex => $pubvalue) {
                      $q1 ='SELECT publisher FROM rpublisher WHERE id = '.$pubvalue;
                      $r1 = $db->query($q1);
                      $a1 = $db->fetch_array_assoc($r1);
                      $p_name = $a1['publisher'];
                      $p_id = $pubvalue;
                      if(end($aa)==$pubvalue){
                          $publisher .= '<span>'.$p_name.'</span>';
                      } else {
                          $publisher .= '<span>'.$p_name.'</span>, ';
                      }
                  }
                  return $publisher;
              } else {
                  return $publisher='';
              }
          },
          'field' => 'publisher'
    ),
    array('db' => '`t`.`licensor`', 
          'dt' => 6,
          'formatter' => function($lcs){
              if($lcs != ''){
                  $al = explode(',',$lcs);
                  $licensor ="";
                  $db = new Database();
                  $db->connect();
                  foreach ($al as $licindex => $licvalue) {
                      $q_l ='SELECT licensor FROM rlicensor WHERE licensor_id = '. $licvalue;
                      $r_l = $db->query($q_l);
                      $a_l = $db->fetch_array_assoc($r_l);
                      $l_id = $licvalue;
                      $l_name = $a_l['licensor'];
                      if(end($al)==$licvalue){
                          $licensor .= '<span>'.$l_name.'</span>';
                      } else {
                          $licensor .= '<span>'.$l_name.'</span>, ';
                      }
                  }
                  return $licensor;
              } else { 
                  $licensor = ''; return $licensor;
              }
          },
          'field' => 'licensor'
    ),
    array('db' => '`t`.`genre`', 'dt' => 7,
          'formatter' => function($g){
              if($g != ''){
                  $ag = explode(',',$g);
                  $genre ="";
                  $db = new Database();
                  $db->connect();
                  foreach ($ag as $genindex => $genvalue) {
                      $q2 ='SELECT genre FROM rgenre WHERE id = '.$genvalue;
                      $r2 = $db->query($q2);
                      $a2 = $db->fetch_array_assoc($r2);
                      $g_id = $genvalue;
                      $g_name = $a2['genre'];
                      if(end($ag)==$genvalue){
                          $genre .= '<span>'.$g_name.'</span>';
                      } else {
                          $genre .= '<span>'.$g_name.'</span>, ';
                      }
                  }
                  return $genre;
              } else {
                  $genre = ''; return $genre;
              }
          },
         'field' => 'genre'
    ),
    array('db' => '`t`.`discno`', 
          'dt' => 8, 
          'field' => 'discno'
    ),
    array('db' => '`t`.`trackno`', 
          'dt' => 9, 
          'field' => 'trackno'
    )
);
require('class/datatables_v2.php');
$joinQuery = "FROM `{$table}` AS `t` ";
$extraCondition = "";
echo json_encode(
    SSP::simple($_GET, $db->mysql_details(), $table, $primaryKey, $columns, $joinQuery, $extraCondition)
);

作为您给出的示例是服务器端数据表和日期不匹配的问题正在发生,因为在后端日期以'yyyy-mm-dd'格式存储(这是mysql数据库中的日期格式)。如果你想搜索的日期是另一种格式,这种格式'yyyy-mm-dd',你必须在后端转换它。您可以将搜索条件放在任意数量的列上。

,

$sSearch = $_REQUEST['sSearch'];
if($position != '')
{
    $position_filter = "col1 LIKE '%".$sSearch."%' or col2 LIKE '%".$sSearch."%'";
}