Php 无法在使用SQL server的Datatables服务器端使用order和limit
我在将datatable服务器端代码从MySQL传输到SQL server时遇到问题。如果我在服务器端删除这一行,我就能够显示输出 $sql.=“订购人”$列[$requestData['order'][0]['column']..“..$requestData['order'][0]['dir'.]”限制“$requestData['start'.]”、“$requestData['length'.]” 但问题是我不能订购和限制出现的物品数量。如何使此代码在SQL server中工作?求求你,任何帮助都会是很大的帮助。多谢各位 这是我服务器端的完整代码Php 无法在使用SQL server的Datatables服务器端使用order和limit,php,sql-server,datatables,Php,Sql Server,Datatables,我在将datatable服务器端代码从MySQL传输到SQL server时遇到问题。如果我在服务器端删除这一行,我就能够显示输出 $sql.=“订购人”$列[$requestData['order'][0]['column']..“..$requestData['order'][0]['dir'.]”限制“$requestData['start'.]”、“$requestData['length'.]” 但问题是我不能订购和限制出现的物品数量。如何使此代码在SQL server中工作?求求你,
<?php require_once("../includes/connection.php");
$connection = sqlsrv_connect(DB_HOST, array( 'Database'=>DB_NAME, 'UID'=>DB_USER, 'PWD'=>DB_PASSWORD,"CharacterSet" => "UTF-8"));
// /* Database connection end */
if( $connection ) {
}else{
echo "Connection could not be established.<br />";
die( print_r( sqlsrv_errors(), true));
}
// // storing request (ie, get/post) global array to a variable
$requestData= $_REQUEST;
$columns = array(
// datatable column index => database column name
0 =>'new_id',
1 => 'person_name',
2=> 'given_name',
3=> 'family_name'
);
// getting total number records without any search
$sql = "SELECT * , user.id as new_id ";
$sql.=" FROM user LEFT JOIN user_additional on user.doc_id = user_additional.doc_id LEFT JOIN users on users.id = user.user_name";
$query=sqlsrv_query($connection, $sql) ;
if( $query === false) {
die( print_r( sqlsrv_errors(), true) );
}
$totalData = sqlsrv_num_rows($query);
$totalFiltered = $totalData; // when there is no search parameter then total number rows = total number filtered rows.
$sql ="SELECT * , user.id as new_id ";
$sql.=" FROM user LEFT JOIN user_additional on user.doc_id = user_additional.doc_id LEFT JOIN users on users.id = user.user_name WHERE 1=1";
if( !empty($requestData['search']['value']) ) { // if there is a search parameter, $requestData['search']['value'] contains search parameter
$sql.=" AND ( person_name LIKE '%".$requestData['search']['value']."%' ";
$sql.=" OR family_name LIKE '%".$requestData['search']['value']."%' ";
$sql.=" OR given_name LIKE '".$requestData['search']['value']."%' )";
}
$query=sqlsrv_query($connection, $sql) ;
if( $query === false) {
die( print_r( sqlsrv_errors(), true) );
}
$totalFiltered = sqlsrv_num_rows($query); // when there is a search parameter then we have to modify total number filtered rows as per search result.
$sql.=" ORDER BY ". $columns[$requestData['order'][0]['column']]." ".$requestData['order'][0]['dir']." LIMIT ".$requestData['start']." ,".$requestData['length']." ";
/* $requestData['order'][0]['column'] contains colmun index, $requestData['order'][0]['dir'] contains order such as asc/desc */
$query=sqlsrv_query($connection, $sql) ;
if( $query === false) {
die( print_r( sqlsrv_errors(), true) );
}
$data = array();
while( $row=sqlsrv_fetch_array($query) ) { // preparing an array
$nestedData=array();
// $nestedData[]="";
$nestedData[] = $row["new_id"];
$nestedData[] = $row["person_name"];
$nestedData[] = $row["given_name"];
$nestedData[] = $row["family_name"];
;
$data[] = $nestedData;
}
$json_data = array(
"draw" => intval( $requestData['draw'] ), // for every request/draw by clientside , they send a number as a parameter, when they recieve a response/data they first check the draw number, so we are sending same number in draw.
"recordsTotal" => intval( $totalData ), // total number of records
"recordsFiltered" => intval( $totalFiltered ), // total number of records after searching, if there is no searching then totalFiltered = totalData
"data" => $data // total data array
);
echo json_encode($json_data); // send data as json format
?>
如果您使用的是sql server 2012或更高版本,则可以使用
偏移/仅取下n行
子句。示例查询供您参考:
SELECT Id, FirstName, LastName, Dept
FROM Employee
order by Id asc
offset 100 rows
fetch next 10 rows only
请在修改代码后重试,以生成上述查询 如果您使用的是sql server 2012或更高版本,则可以使用
OFFSET/FETCH NEXT n ROWS ONLY
子句。示例查询供您参考:
SELECT Id, FirstName, LastName, Dept
FROM Employee
order by Id asc
offset 100 rows
fetch next 10 rows only
请在修改代码后重试,以生成上述查询 SQL Server中的SELECT TOP n相当于mysql中的limit。SQL Server中的SELECT TOP n相当于mysql中的limit。您好,当我将静态数据按顺序放入100中时,我已经修改了它,但当我将变量放入其中时,它在SQL Server数据表中不起作用。有什么想法吗$sql.=“订单依据”$列[$requestData['order'][0]['column'].'..$requestData['order'][0]['dir'].“偏移量”。$requestData['start'.]获取下一个“$requestData['length'..”仅行”;'您可以打印$sql并共享生成的sql吗?您好,当我按顺序将静态数据放入100中时,我已经修改了它,但当我将变量放入其中时,它在sql server数据表中不起作用。有什么想法吗$sql.=“订单依据”$列[$requestData['order'][0]['column'].'..$requestData['order'][0]['dir'].“偏移量”。$requestData['start'.]获取下一个“$requestData['length'..”仅行”;'能否打印$sql并共享生成的sql?