Php 如何在datatable服务器端搜索其他查询
我在服务器端使用datatables,一切正常。现在,我尝试在代码中搜索从函数attrib()获取的数据。这会为每行添加更多信息,但问题是无法搜索其数据 这是可以理解的,因为它不存在于用于搜索数据库的主$sql查询中。有办法解决这个问题吗 我知道这可能很难理解,所以我尽量说清楚。如果你能提供帮助,请要求更多的澄清。谢谢Php 如何在datatable服务器端搜索其他查询,php,datatables,server-side,Php,Datatables,Server Side,我在服务器端使用datatables,一切正常。现在,我尝试在代码中搜索从函数attrib()获取的数据。这会为每行添加更多信息,但问题是无法搜索其数据 这是可以理解的,因为它不存在于用于搜索数据库的主$sql查询中。有办法解决这个问题吗 我知道这可能很难理解,所以我尽量说清楚。如果你能提供帮助,请要求更多的澄清。谢谢 $sql = "SELECT mat_code,mat_descp,short_code_details,approverComment,date_created,
$sql = "SELECT mat_code,mat_descp,short_code_details,approverComment,date_created,
mt.mat_type, mt.mat_desc,
vc.val_class,vc.val_class_desc,
vc.val_cat_code,vc.val_cat_desc,
n.noun_name,n.qualifier,n.shorttext_item,
u.uombs,
mg.mtgp_id,mg.mtgp_desc,
pt.plant_name,
sl.sl_id,sl.sto_loc_name,
pg.pur_id,pg.purchs_gp_name,
us.fname,us.lname,mat_status
FROM mat_master_head mmh
INNER JOIN material_type mt ON mmh.mat_type = mt.mat_type
LEFT OUTER JOIN valuation_class vc ON mmh.val_class_id = vc.id
INNER JOIN noun n ON mmh.noun_id = n.noun_id
INNER JOIN uom_bs u ON mmh.uombs_id = u.uombs_id
INNER JOIN material_group mg ON mmh.mg_id = mg.id
INNER JOIN plant pt ON mmh.plant_id = pt.plant_id
INNER JOIN storage_location sl ON mmh.sl_id = sl.id
INNER JOIN purchase_gp pg ON mmh.pur_id = pg.pur_id
INNER JOIN users us ON mmh.user_id = us.id
WHERE (1=1)";
// AND mat_status = 4 AND (download_status = 0 OR download_status = 1)
if( !empty($requestData['search']['value']) ) { // if there is a search parameter, $requestData['search']['value'] contains search parameter
$sql.=" AND ( mat_code LIKE '%".$requestData['search']['value']."%' ";
$sql.=" OR plant_name LIKE '%".$requestData['search']['value']."%' ";
$sql.=" OR sto_loc_name LIKE '%".$requestData['search']['value']."%' ";
$sql.=" OR noun_name LIKE '%".$requestData['search']['value']."%' ";
$sql.=" OR qualifier LIKE '%".$requestData['search']['value']."%' ";
$sql.=" OR shorttext_item LIKE '%".$requestData['search']['value']."%' ";
$sql.=" OR short_code_details LIKE '%".$requestData['search']['value']."%' ";
$sql.=" OR uombs LIKE '%".$requestData['search']['value']."%' ";
$sql.=" OR mat_descp LIKE '%".$requestData['search']['value']."%' ";
$sql.=" OR fname LIKE '%".$requestData['search']['value']."%' ";
$sql.=" OR lname LIKE '%".$requestData['search']['value']."%' ";
$sql.=" OR date_created LIKE '%".$requestData['search']['value']."%' )";
}
$query = $conn->query($sql);
$totalFiltered = $query->rowCount(); // when there is a search parameter then we have to modify total number filtered rows as per search result.
if( !empty($requestData['order'][0]['column']) || !empty($requestData['order'][0]['dir']) || !empty($requestData['start']) || !empty($requestData['length'])) {
$sql.=" ORDER BY ". $columns[$requestData['order'][0]['column']]."
".$requestData['order'][0]['dir']." ";
$sql.=" LIMIT ".$requestData['start']." , ".$requestData['length']." ";
/* $requestData['order'][0]['column'] contains colmun index, $requestData['order'][0]['dir'] contains order such as asc/desc */
}
$query = $conn->query($sql);
///Attribute Function//////////////////////////////////
function attrib($mat_code)
{
global $conn;
$mat_query = "SELECT a.attributes, mmd.attr_value, u.uombs FROM mat_master_details mmd
INNER JOIN attribute a ON mmd.attr_id = a.attr_id
INNER JOIN uom u ON a.uombs_id = u.uombs_id
WHERE mat_code = '$mat_code' AND mmd.attr_value >= '0'";
$mat = $conn->query($mat_query);
$attribs = '';
foreach($mat as $mats){
$attribs .= removeSlash($mats['attributes'].' - '.$mats['attr_value'].''.$mats['uombs'].' ');
}
return '<span class="colortxt3">'.$attribs.'</span>';
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
$data = array();
foreach ($query as $row) { // preparing an array
$nestedData=array(); //new array to display list
$nestedData[0] = $row['mat_code'];
$nestedData[1] = MatStatus($row['mat_status']);
$nestedData[2] = '<span class="lgtxt">'.'PLANT:'.' '.'</span>'.'<span class="colortxt">'.$row['plant_name'].'</span>'.' '.
'<span class="lgtxt">'.'STORAGE LOCATION:'.' '.'</span>'.'<span class="colortxt">'.$row['sto_loc_name'].'</span>'.' '.'<br>'.
'<span class="lgtxt">'.'NOUN:'.' '.'</span>'.'<span class="colortxt">'.$row['noun_name'].'</span>'.' '.
'<span class="lgtxt">'.'QUALIFIER:'.' '.'</span>'.'<span class="colortxt">'.$row['qualifier'].'</span>'.' '.
'<span class="lgtxt">'.'SHORT TEXT:'.' '.'</span>'.'<span class="colortxt">'.$row['shorttext_item'].''.removeSlash($row['short_code_details']).'</span>'.' '.
'<span class="lgtxt">'.'BASE UOM:'.' '.'</span>'.'<span class="colortxt">'.$row['uombs'].'</span>'.' '.'<br>'.
'<span class="lgtxt">'.''.'</span>'.'<span class="colortxt4">'.$row['mat_descp'].'</span>'.' '.
'<span class="colortxt3">'.attrib($nestedData[0]).'</span>'.' '.'<br>'.
'<span class="lgtxt">'.'CREATED BY:'.' '.'</span>'.'<span class="colortxt2">'.$row['fname']." ". $row['lname'].'</span>'.' '.
'<span class="lgtxt">'.'DATE CREATED:'.' '.'</span>'.'<span class="colortxt2">'.$row['date_created'].'</span>';
$nestedData[3] = '<a href="materialMasterForm.php?id='.$row['mat_code'].'" target="_blank" class="nbtn">View</a>';
$data[] = $nestedData;
}
$sql=“选择物料代码、物料描述、简短的物料代码详细信息、审批人注释、创建日期、,
mt.mat_类型,mt.mat_描述,
vc.val\u class,vc.val\u class\u desc,
vc.val_cat_代码,vc.val_cat_desc,
n、 名词名,限定词,短文本项,
u、 uombs,
mg.mtgp_id,mg.mtgp_desc,
pt.工厂名称,
sl.sl_id,sl.sto_loc_名称,
pg.PURU id,pg.purchs\U gp\U名称,
美国名称,美国名称,材料状态
来自mat_master_head mmh
mmh上的内部连接材料类型mt.mat类型=mt.mat类型
mmh.val\u class\u id=vc.id上的左外连接赋值类vc
mmh.noun\u id=n.noun\u id上的内部连接名词n
mmh.uombs\u id=u.uombs\u id上的内部联接计量单位
mmh.mg上的内部连接材料组mg\U id=mg.id
mmh.plant\U id上的内部连接设备pt=pt.plant\U id
mmh.sl\u id=sl.id上的内部联接存储位置sl
mmh.pur\U id=pg.pur\U id上的内部连接采购\U gp pg
内部用户在mmh.user\u id=us.id上加入我们
式中(1=1)”;
//和mat_status=4和(download_status=0或download_status=1)
如果(!empty($requestData['search']['value']){//如果有搜索参数,$requestData['search']['value']包含搜索参数
$sql.=”和(类似“%”的mat_代码$requestData['search']['value'].“%”);
$sql.=”或类似“%”的plant_名称$requestData['search']['value']。“%”;
$sql.=”或类似“%”的sto_loc_名称$requestData['search']['value'].“%”;
$sql.=”或类似“%”的名词名称$requestData['search']['value']。“%”;
$sql.=”或类似“%”的限定符$requestData['search']['value'].“%”;
$sql.=”或类似“%”的短文本项$requestData['search']['value'].“%”;
$sql.=”或“%”之类的简短代码详细信息,$requestData['search']['value'].“%”;
$sql.=“或类似“%”的计量单位$requestData['search']['value']。“%”;
$sql.=“或类似“%”的mat_descp$requestData['search']['value'].“%”;
$sql.=”或类似“%”的fname$requestData['search']['value'].“%”;
$sql.=”或类似“%”的lname$requestData['search']['value'].“%”;
$sql.=”或像“%”一样创建的日期\$requestData['search']['value'].“%”);
}
$query=$conn->query($sql);
$totalFiltered=$query->rowCount();//当有搜索参数时,我们必须根据搜索结果修改过滤行的总数。
如果(!empty($requestData['order'][0]['column']])| |!empty($requestData['order'][0]['dir']])| |!empty($requestData['length'])){
$sql.=“订单依据”$columns[$requestData['ORDER'][0]['column']]
“$requestData['order'][0]['dir']”;
$sql.=“限制”。$requestData['start']。”、“$requestData['length']。”;
/*$requestData['order'][0]['column']包含colmun索引,$requestData['order'][0]['dir']包含asc/desc等顺序*/
}
$query=$conn->query($sql);
///属性函数//////////////////////////////////
函数属性($mat_代码)
{
全球$conn;
$mat\u query=“从mat\u master\u details mmd中选择a.attributes、mmd.attr\u value、u.uombs
mmd.attr\u id=a.attr\u id上的内部联接属性a
a.uombs_id=u.uombs_id上的内部联接计量单位u
其中mat_code='$mat_code'和mmd.attr_value>='0';
$mat=$conn->query($mat\u query);
$attribs='';
foreach($mat作为$mats){
$attribs.=removeSlash($mats['attributes'.-'.$mats['attr_value'.'.'.$mats['uombs'.]);
}
返回“.$attribs.”;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
$data=array();
foreach($queryas$row){//准备数组
$nestedData=array();//要显示列表的新数组
$nestedData[0]=$row['mat_code'];
$nestedData[1]=MatStatus($row['mat_status');
$nestedData[2]=''植物:'.$row['PLANT_name'.''.''.''。
'.'存储位置:'.'.$row['sto_loc_name'.].'.'.'
'。
''名词:'.$行['NOUN_name'.'.''.''.'''.''.'。
'.'限定符:'.$row['QUALIFIER'.'.''.'。
'.'SHORT TEXT:'.$row['shorttext\u item'.'.'.'.'删除Flash($row['SHORT\u code\u details'])。'.''。
'.'基本计量单位:'.$row['uombs'.'.'.'.'.'。
“.”.$row['mat_descp'.]”.“.”。
'.attrib($nestedData[0])。'。
''创建人:'''.$row['fname'].''.'.$row['lname'].''。
'.'创建日期:'.'.$row['DATE_CREATED'.']。';
$nestedData[3]='';
$data[]=$nestedData;
}
你没有让这变得容易。首先,“数据表”可以指几件事。只是有“数据”的“表格”,但我想是的
您的代码中有一个函数attrib()
,但它做什么?!它的名字没有告诉我任何事情,上面的评论是:“属性函数”,这不是很有启发性。好的,我明白了,它执行一个查询
因此,您在“datatable”中输出一列,其中的值来自查询,您希望能够在选择行f之前搜索该值
$sql .=" OR (SELECT ... FROM ... WHERE ....) LIKE '%".$requestData['search']['value']."%' ";