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 что.