在 DataTable 服务器端处理中调用函数
Calling a function in DataTable Server Side Processing
我刚开始使用 DataTable ServerSide Processing。我很困惑在列数组中调用 PHP 函数。
这是前端代码。
<table id="memListTable" class="display" style="width:100%">
<thead>
<tr>
<th>Request Date</th>
<th>District Name</th>
<th>Request Type</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Request Date</th>
<th>District</th>
<th>Request Type</th>
</tr>
</tfoot>
</table>
<script>
$(document).ready(function(){
$('#memListTable').DataTable({
"processing": true,
"serverSide": true,
"aaSorting": [[0,'desc']],
"ajax": "getData.php"
});
});
</script>
getData.php
<?php
$dbDetails = array(
'host' => '****',
'user' => '****',
'pass' => '****',
'db' => '****'
);
$table = 'requestss';
$primaryKey = 'id';
$columns = array(
array( 'db' => 'time_stamp', 'dt' => 0 ),
array( 'db' => 'dist_code', 'dt' => 1),
array( 'db' => 'req_type', 'dt' => 2 )
);
// Include SQL query processing class
require( 'ssp.class.php' );
// Output data as json format
echo json_encode(
SSP::simple( $_GET, $dbDetails, $table, $primaryKey, $columns )
);
两个文件都产生了完美的结果。 输出
我只想显示学区名称而不是学区代码。我有一个用 functions.php 编写的函数,该函数能够从数据库中获取地区名称。我只是想知道,我必须在哪里调用这个函数。这是我在 function.php
里面写的函数
function getDistrict($dist_code,$con)
{
$sql = "SELECT disname FROM districts WHERE discode=$dist_code";
$query = mysqli_query($con,$sql);
if($query)
{
while($row = mysqli_fetch_array($query))
{
return $value = $row['disname'];
}
}
}
其实我不知道,如何在 $column 数组中调用这个函数。请帮忙。提前致谢
ssp.class.php
不支持 JOIN
。但是我们有一个解决方法:
方案一(使用子查询):
在您的 $table
定义中使用子查询,并在 $columns
中将 dist_code
替换为 disname
,如下所示:
$dbDetails = [
'host' => '****',
'user' => '****',
'pass' => '****',
'db' => '****'
];
$table = '(SELECT r.*, d.disname FROM requestss r INNER JOIN districts d ON r.dist_code = d.discode) tbl';
$primaryKey = 'id';
$columns = [
[ 'db' => 'time_stamp', 'dt' => 0 ],
[ 'db' => 'disname', 'dt' => 1 ],
[ 'db' => 'req_type', 'dt' => 2 ]
];
// Include SQL query processing class
require( 'ssp.class.php' );
// Output data as json format
echo json_encode(
SSP::simple( $_GET, $dbDetails, $table, $primaryKey, $columns )
);
然后,您需要将 `$table`
的所有实例替换为 $table
以删除 ssp.class.php
文件中的反引号。
解决方案 2(创建视图):
如果您不想编辑 ssp.class.php
文件,您可以在数据库中创建一个视图:
CREATE
VIEW requests_view
AS SELECT r.*, d.disname FROM requestss r INNER JOIN districts d ON r.dist_code = d.discode;
然后,使用 requests_view
作为 getData.php
文件中的 $table
:
$dbDetails = [
'host' => '****',
'user' => '****',
'pass' => '****',
'db' => '****'
];
$table = 'requests_view';
$primaryKey = 'id';
$columns = [
[ 'db' => 'time_stamp', 'dt' => 0 ],
[ 'db' => 'disname', 'dt' => 1 ],
[ 'db' => 'req_type', 'dt' => 2 ]
];
// Include SQL query processing class
require( 'ssp.class.php' );
// Output data as json format
echo json_encode(
SSP::simple( $_GET, $dbDetails, $table, $primaryKey, $columns )
);
您也可以考虑使用支持 JOIN
的第三方 PHP 库,例如 Customized SSP Class For Datatables Library or Datatables library for PHP。
我刚开始使用 DataTable ServerSide Processing。我很困惑在列数组中调用 PHP 函数。
这是前端代码。
<table id="memListTable" class="display" style="width:100%">
<thead>
<tr>
<th>Request Date</th>
<th>District Name</th>
<th>Request Type</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Request Date</th>
<th>District</th>
<th>Request Type</th>
</tr>
</tfoot>
</table>
<script>
$(document).ready(function(){
$('#memListTable').DataTable({
"processing": true,
"serverSide": true,
"aaSorting": [[0,'desc']],
"ajax": "getData.php"
});
});
</script>
getData.php
<?php
$dbDetails = array(
'host' => '****',
'user' => '****',
'pass' => '****',
'db' => '****'
);
$table = 'requestss';
$primaryKey = 'id';
$columns = array(
array( 'db' => 'time_stamp', 'dt' => 0 ),
array( 'db' => 'dist_code', 'dt' => 1),
array( 'db' => 'req_type', 'dt' => 2 )
);
// Include SQL query processing class
require( 'ssp.class.php' );
// Output data as json format
echo json_encode(
SSP::simple( $_GET, $dbDetails, $table, $primaryKey, $columns )
);
两个文件都产生了完美的结果。 输出
我只想显示学区名称而不是学区代码。我有一个用 functions.php 编写的函数,该函数能够从数据库中获取地区名称。我只是想知道,我必须在哪里调用这个函数。这是我在 function.php
里面写的函数function getDistrict($dist_code,$con)
{
$sql = "SELECT disname FROM districts WHERE discode=$dist_code";
$query = mysqli_query($con,$sql);
if($query)
{
while($row = mysqli_fetch_array($query))
{
return $value = $row['disname'];
}
}
}
其实我不知道,如何在 $column 数组中调用这个函数。请帮忙。提前致谢
ssp.class.php
不支持 JOIN
。但是我们有一个解决方法:
方案一(使用子查询):
在您的 $table
定义中使用子查询,并在 $columns
中将 dist_code
替换为 disname
,如下所示:
$dbDetails = [
'host' => '****',
'user' => '****',
'pass' => '****',
'db' => '****'
];
$table = '(SELECT r.*, d.disname FROM requestss r INNER JOIN districts d ON r.dist_code = d.discode) tbl';
$primaryKey = 'id';
$columns = [
[ 'db' => 'time_stamp', 'dt' => 0 ],
[ 'db' => 'disname', 'dt' => 1 ],
[ 'db' => 'req_type', 'dt' => 2 ]
];
// Include SQL query processing class
require( 'ssp.class.php' );
// Output data as json format
echo json_encode(
SSP::simple( $_GET, $dbDetails, $table, $primaryKey, $columns )
);
然后,您需要将 `$table`
的所有实例替换为 $table
以删除 ssp.class.php
文件中的反引号。
解决方案 2(创建视图):
如果您不想编辑 ssp.class.php
文件,您可以在数据库中创建一个视图:
CREATE
VIEW requests_view
AS SELECT r.*, d.disname FROM requestss r INNER JOIN districts d ON r.dist_code = d.discode;
然后,使用 requests_view
作为 getData.php
文件中的 $table
:
$dbDetails = [
'host' => '****',
'user' => '****',
'pass' => '****',
'db' => '****'
];
$table = 'requests_view';
$primaryKey = 'id';
$columns = [
[ 'db' => 'time_stamp', 'dt' => 0 ],
[ 'db' => 'disname', 'dt' => 1 ],
[ 'db' => 'req_type', 'dt' => 2 ]
];
// Include SQL query processing class
require( 'ssp.class.php' );
// Output data as json format
echo json_encode(
SSP::simple( $_GET, $dbDetails, $table, $primaryKey, $columns )
);
您也可以考虑使用支持 JOIN
的第三方 PHP 库,例如 Customized SSP Class For Datatables Library or Datatables library for PHP。