DataTables服务器端:使用GROUP BY和SUM进行查询

时间:2014-12-11 11:35:28

标签: php jquery-datatables server-side

我正在使用DataTables服务器端来显示我的数据。 (example)  (manual)。

我能够通过以下方式扩展此工具:

echo json_encode(
    SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns, $groupby )
);

并在类ssp.class.php

$data = self::sql_exec( $db, $bindings,
    "SELECT SQL_CALC_FOUND_ROWS `".implode("`, `", self::pluck($columns, 'db'))."`
     FROM `$table`
     $where
     $groupby
     $order
     $limit"
);

但是当我想要一个列的SUM时,我收到一个错误,即找不到列SUM(GrossPrice)。

以下是处理列的方式:

$columns = array(
    array( 'db' => 'ProductDescription',  'dt' => 0 ),
    array( 'db' => 'SUM(GrossPrice)',   'dt' => 1 ),
    array( 'db' => 'SUM(Number)',   'dt' => 2 )
);

2 个答案:

答案 0 :(得分:1)

我找到了一种解决方法:

我使用'sum()' - mysql在mysql中创建了一个视图,并且只使用了数据表来显示这个视图。

希望这能为其他人服务。

答案 1 :(得分:1)

老问题,但我回答谁有同样的问题。

您可以将this class与joinQuery一起使用。我们使用joinQuery,因为如果我们不使用,SSP类将使用自己的查询。

$columns = array(
    array('db' => 'x.ProductDescription', 'dt' => 0, 'field' => 'ProductDescription'),
    array('db' => 'SUM(x.GrossPrice) as GrossPrice', 'dt' => 1, 'field' => 'GrossPrice'),
    array('db' => 'SUM(x.Number) as Number', 'dt' => 2, 'field' => 'Number')
);

joinQuery示例:

$joinQuery = "FROM {$table} AS x";

并且这样打电话:

echo json_encode(
   SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns, $joinQuery)
);

此类为JOIN查询定制,但您可以像这样使用。感谢此课程的Emran