Вызов функции при обработке на стороне сервера DataTable - PullRequest
0 голосов
/ 13 января 2020

Я новичок в использовании DataTable ServerSide Processing. Я запутался, вызывая функцию PHP внутри массива Columns.

Вот код переднего конца.

<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 )
);

Оба файла дают отличные результаты. Вывод OutPut

Я просто хочу показать название района вместо кода района. У меня есть функция, написанная на функциях. php, и эта функция может извлечь название района из базы данных. Мне просто интересно, где я должен вызвать эту функцию. Это функция, которую я написал внутри функции . 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. Пожалуйста помоги. Заранее спасибо

1 Ответ

2 голосов
/ 13 января 2020

ssp.class.php не поддерживает JOIN. Но у нас есть обходной путь для этого:

Решение 1 (Используйте подзапрос):

Используйте подзапрос в своем определении $table и замените dist_code на disname в $columns, как показано ниже:

$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 в качестве $table в getData.php файле:

$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 )
);

Вы также можете использовать сторонние PHP библиотеки, такие как Настраиваемый класс SSP для библиотеки данных или Datatables библиотека для PHP, которая поддерживает JOIN s.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...