数据表:使用ServerSide在另一个表中发出并行请求

时间:2015-05-19 12:27:29

标签: mysql pdo datatables

编辑:我通过我在此处找到的自定义SSP类替换SSP类找到了解决方案:https://github.com/emran/ssp

我不知道这是否是一个可以理解的标题,但这是我的问题:

我有一个需要插入数据表的DB表(称为项目)。使用ServerSide拨打电话并在数据表中获取结果我没有问题。

但是,对于每个项目(每行),都有一个项目创建者(项目DB表中的列creator_id)。我需要做的是每次从项目DB表中获取一行时,向创建者DB-table发出请求以获取创建者的名字/姓氏。这有道理吗?

以下是我使用的代码:

$table = 'projects';

$primaryKey = 'project_id';

$columns = array(
    array(
        'db' => 'project_id',
        'dt' => 'DT_RowId',
        'formatter' => function( $d, $row ) {
            return $d;
        }
    ),
    array(  'db' => 'creator_id',
            'dt' => 'creator',
            'formatter' => function( $d, $row ) {

                // Here I need to make a call to the creators DB-table and return the $creator_name value

                return $creator_name;

            }
    )
);

// SQL server connection information
$sql_details = array(
    'user' => '',
    'pass' => '',
    'db'   => '',
    'host' => ''
);

require(BASE_DIR.'/lib/dataTables/ssp.class.php');

$result = SSP::simple($_GET, $sql_details, $table, $primaryKey, $columns);

1 个答案:

答案 0 :(得分:0)

您可以使用formatter属性创建单独的SQL查询,但会通过增加脚本响应时间来大大影响性能。

相反,当您使用ssp.class.php子查询而不是表名来使用GROUP BYJOIN等时,您可以使用以下技巧。

<?php

$table = <<<EOT
 (
    SELECT projects.project_id, creators.creator_id, creators.creator_name
     FROM projects
     LEFT JOIN creators ON projects.creator_id=creators.creator_id
 ) t
EOT;

$primaryKey = 'project_id';

$columns = array(
    array(
        'db' => 'project_id',
        'dt' => 'DT_RowId'
    ),
    array(  
        'db' => 'creator_id',
        'dt' => 'creator'
    ),
    array(  
        'db' => 'creator_name',
        'dt' => 'creator_name'
    )
);

// SQL server connection information
$sql_details = array(
    'user' => '',
    'pass' => '',
    'db'   => '',
    'host' => ''
);

require(BASE_DIR.'/lib/dataTables/ssp.class.php');

$result = SSP::simple($_GET, $sql_details, $table, $primaryKey, $columns);

echo json_encode($result);

要使用该技巧,您还需要修改ssp.class.php并将FROM `$table`的所有实例替换为FROM $table以删除反引号。

或者,库github.com/emran/ssp存储库扩展ssp.class.php,允许GROUP BYJOIN,别名。

LINKS

有关详细信息,请参阅jQuery DataTables: Using WHERE, JOIN and GROUP BY with ssp.class.php