如何在使用过滤器时对所有行求和

时间:2015-07-21 16:12:02

标签: php jquery mysql datatables

我一直在阅读许多关于如何使用footerCallback来汇总MySQL表的所有行的jQuery Datatables示例,但是当我每页使用记录时,我可以得到列的总和过滤。在Footer callback example中,他们展示了一个演示,这就是代码:

$(document).ready(function() {
    $('#example').dataTable( {
        "footerCallback": function ( row, data, start, end, display ) {
            var api = this.api(), data;

            // Remove the formatting to get integer data for summation
            var intVal = function ( i ) {
                return typeof i === 'string' ?
                    i.replace(/[\$,]/g, '')*1 :
                    typeof i === 'number' ?
                        i : 0;
            };

            // Total over all pages
            data = api.column( 4 ).data();
            total = data.length ?
                data.reduce( function (a, b) {
                        return intVal(a) + intVal(b);
                } ) :
                0;

            // Total over this page
            data = api.column( 4, { page: 'current'} ).data();
            pageTotal = data.length ?
                data.reduce( function (a, b) {
                        return intVal(a) + intVal(b);
                } ) :
                0;

            // Update footer
            $( api.column( 4 ).footer() ).html(
                '$'+pageTotal +' ( $'+ total +' total)'
            );
        }
    } );
} );

但是当我在我的PHP脚本中应用时,总计给出了相同数量的pageTotal,当我的每页我的记录过滤器为10时,如果我更改为50它会给我一个新的总数,但是在示例中,如何过滤器为10,它显示表中所有记录的总和。我已经在这两天了,请问有人可以给我一个暗示吗?

1 个答案:

答案 0 :(得分:0)

此页面上的总计

    data = api.column( 4, {filter:'applied'} ).data();
    pageTotal = data.length ?
        data.reduce( function (a, b) {
                return intVal(a) + intVal(b);
        } ) :
        0;