Datatables + PHP: обработка на стороне сервера в нескольких таблицах

как я могу получить Datatables Обработка На Стороне Сервера скрипт для работы с пользовательским запросом? Мне нужно выбрать столбцы из нескольких таблиц и таблиц данных для отображения.

Datatables.net обработка на стороне сервера (SSP) с PHP суммируется здесь:https://datatables.net/examples/server_side/simple.html

Я нашел это поэтому вопрос, но оригинальный плакат никогда не предоставлял своего решения. Я не иметь достаточную репутацию, чтобы попросить его предоставить более подробную информацию.

вот мой необработанный SQL без использования SSP Datatable

SELECT tbl_houses.style, tbl_houses.roomCount, tbl_residents.firstName, tbl_residents.lastName
FROM tbl_houses, tbl_residents
WHERE tbl_houses.houseID = tbl_residents.residentID

/* 
* # Equivalent query using JOIN suggested by @KumarRakesh
* # Note: JOIN ... ON is a synonym for INNER JOIN ... ON
* # Using JOIN conforms to syntax spec'd by ANSI-92 https://stackoverflow.com/a/894855/946957
*
* SELECT tbl_houses.style, tbl_houses.roomCount, tbl_residents.firstName, tbl_residents.lastName 
* FROM tbl_houses 
* JOIN tbl_residents ON tbl_houses.houseID = tbl_residents.residentID
*/

как я могу получить Datatables для запуска запросов с помощью SSP?

появляется server_processing.в PHP принимает только 1 таблицу и никакой пользовательской фильтрации (т. е. WHERE положения).

// DB table to use
$table = 'datatables_demo';

// Table's primary key
$primaryKey = 'id';

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * If you just want to use the basic configuration for DataTables with PHP
 * server-side, there is no need to edit below this line.
 */

require( 'ssp.class.php' );

echo json_encode(
    SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns )
);
, ssp.класс.в PHP тут поддержка фильтрации с помощью WHERE. Я думаю, мне нужно изменить ssp.class.php силы в моем WHERE п.

обновление

нашел решение. Опубликую, когда у меня будет свободное время.

3 ответов


решение

класс ssp.class.php не поддерживает соединения и подзапросы, но есть обходной путь. Трюк заключается в использовании подзапроса, как показано ниже в $table определение. Заменить table С вашим фактическим именем таблицы в подзапросе.

$table = <<<EOT
 (
    SELECT 
      a.id, 
      a.name, 
      a.father_id, 
      b.name AS father_name
    FROM table a
    LEFT JOIN table b ON a.father_id = b.id
 ) temp
EOT;

$primaryKey = 'id';

$columns = array(
   array( 'db' => 'id',          'dt' => 0 ),
   array( 'db' => 'name',        'dt' => 1 ),
   array( 'db' => 'father_id',   'dt' => 2 ),
   array( 'db' => 'father_name', 'dt' => 3 )
);

$sql_details = array(
   'user' => '',
   'pass' => '',
   'db'   => '',
   'host' => ''
);

require( 'ssp.class.php' );
echo json_encode(
   SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns )
);

вам также нужно отредактировать ssp.class.php и замените все экземпляры FROM `$table` С FROM $table чтобы удалить backticks.

убедитесь, что все имена столбцов уникальны, иначе используйте AS присвоить псевдоним.

Примечания

есть еще github.com/emran/ssp репозиторий, содержащий расширенные ssp.class.php поддержка соединений.

ссылки

посмотреть jQuery DataTables: использование WHERE, JOIN и GROUP BY с ssp.класс.в PHP для получения дополнительной информации.


TL; DR: Я закончил использование модификации исходных данных ssp.class.php под названием ssp.php реализовано Эмран уль Хади:https://github.com/emran/ssp

его модификация принимает JOIN, где, GROUP BY и column псевдонимы. Хотя файл не обновлялся более года, он по-прежнему работает с DataTables 1.12.X. Я внес некоторые изменения в его версию, что повышает ее надежность и улучшает документацию с помощью более четкие примеры.

опубликует мои моды / обновления здесь, когда у меня будет немного больше времени. В конце концов, я надеюсь положить в запрос, чтобы получить мои обновления в репозитории.


похоже, что скрипты из DataTables действительно не предназначены для вашего конкретного случая использования. Но есть метод, который позволяет использовать пользовательские предложения where и читать источник ssp.класс.php#complex Я думаю, что эта конфигурация должна работать для вас, используя WHERE метод. The JOIN метод здесь не работает.

короче говоря: отредактируйте server_processing.php к этому:

<?php
// DB table to use
$table = 'tbl_houses, tbl_residents';

// First table's primary key
$primaryKey = 'tbl_houses.id';

$columns = [
    [ 'db' => 'tbl_houses.style'],
    [ 'db' => 'bl_houses.roomCount'],
    [ 'db' => 'tbl_residents.firstName'],
    [ 'db' => 'tbl_residents.lastName']

);

// connection details
$sql_details = [

];

$whereAll = 'tbl_houses.houseID = tbl_residents.residentID';

require( 'ssp.class.php' );

echo json_encode(
    SSP::complex( $_GET, $sql_details, $table, $primaryKey, $columns , null, $whereAll);
);

на complex метод принимает custom WHERE предложения. Но самое сложное-это использование 2-х таблиц. Это то, для чего сценарий, похоже, не предназначен. Я посмотрел, как он строит окончательный sql-запрос, и кажется, что вы можете просто использовать это table_name.field_name обозначения в конфигурации, а также table_name, table_name обозначение $table и $primaryKey переменные.

как уже упоминалось, использование 2 таблиц не предназначено сценарием DataTables. Я не знаю, будут ли работать все функции DataTables что.