Как присоединиться к двум таблицам с помощью ssp.class.php

Я начал использовать плагин DataTables Table для jQuery и получил некоторые проблемы. Я использую пример кода отсюда .

У меня MySQL table witch выглядит так:

id | имя | father_id

father_id – значение id в одной таблице только в разных father_id . Поэтому, если я хочу знать имя отца, мне нужно искать в той же таблице WHERE id = father_id . Но какой DataTable он просто отображает содержимое таблицы MySQL так, как есть.

В моем DataTable я хочу показать такие данные:

id | имя | имя отца | father_id

Поэтому, когда DataTable берет данные из таблицы MySQL, но перед созданием таблицы я хочу изменить значение столбца, которое в то время является значением параметра father_id в той же строке в MySQL. Я хочу также добавить father_name , ища его с определенным father_id .

Related of "Как присоединиться к двум таблицам с помощью ssp.class.php"

Как указывал PaulF , вам нужно использовать JOIN или sub-query для извлечения имени отца из той же таблицы.

Я предполагаю, что вы используете ssp.class.php для обработки ваших данных на стороне сервера на основе упомянутого вами примера.

Класс ssp.class.php не поддерживает соединения и 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 чтобы удалить обратные ссылки.

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

ЗАМЕТКИ

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

ССЫЛКИ

См. JQuery DataTables: Использование WHERE, JOIN и GROUP BY с помощью ssp.class.php для получения дополнительной информации.

Присоединитесь к таблице с собой – вам нужно будет использовать псевдонимы

 SELECT a.id, a.name, b.name, b.id FROM table a join table b on (b.father_id=a.id); 

Недавно я обнаружил, что использую DataTables и требую более сложного предложения JOIN и WHERE, которое оригинальный ssp.class.php не поддерживал. Поэтому я изменил исходный файл и немного изменил API, чтобы предоставить таблицу, которая дала мне необходимую мне гибкость. Я объединил функциональность «SSP :: simple» и «SSP :: complex» в единую функцию с именем «SSP :: process».

Из-за длины скрипта, я положил его на pastebin.com здесь: ssp.class.php

И быстрый пример того, как я его использую:

 private function get_recent_payments() { global $pdoHost, $pdoUser, $pdoPass, $pdoDatabase; // SQL server connection information $sql_details = array( 'user' => $pdoUser, 'pass' => $pdoPass, 'db' => $pdoDatabase, 'host' => $pdoHost ); // DataTables server-side processing require_once('ssp.class.php'); $options = [ 'table' => 'payments', 'alias' => 'l', 'primaryKey' => 'id', 'columns' => [ [ 'db' => 'id', 'dt' => 0 ], [ 'db' => 'client_id', 'dt' => 1, 'join' => [ 'table' => 'clients', 'on' => 'id', 'select' => 'first_name', 'alias' => 'c', 'as' => 'fname', ] ], [ 'db' => 'client_id', 'dt' => 2, 'join' => [ 'table' => 'clients', 'on' => 'id', 'select' => 'last_name', 'alias' => 'c' ] ], [ 'db' => 'pay_date', 'dt' => 3 ] ], 'where' => [ [ 'db' => 'client_id', 'op' => '!=', 'value' => $_SESSION['client_id'] ] ] ]; $this->response(SSP::process($_REQUEST, $sql_details, $options)); } 

В параметрах «где» и «whereResult» (SEE «SSP :: complex» для деталей) также может быть «псевдоним», чтобы ссылаться на столбец в объединенной таблице.

Пример SQL-запроса, переданного на сервер:

 SELECT l.`id`, c.`first_name` AS 'fname', c.`last_name`, l.`pay_date` FROM `payments` l JOIN `clients` c ON (c.`id` = l.`client_id`) WHERE l.`client_id` != :binding_0 ORDER BY l.`pay_date` DESC LIMIT 0, 5 

Я взял маршрут структурированного массива, потому что это позволило мне создавать запросы, сохраняя при этом жесткость запросов с backticks и связанными параметрами оператора. Я поднимаю этот пост в надежде, что другие найдут его полезным, как я.