0
$b->include_related('tent',NULL,TRUE,TRUE)->include_related('booking/guest',NULL,TRUE,FALSE)->include_related('booking/bookingbasis',NULL,TRUE,FALSE)->include_related('booking',NULL,TRUE,FALSE);
            $b->group_by('booking_id');
            $b->select_sum('booking_total','sum_booking_booking_total');
            $b->select_sum('booking_taxes','sum_booking_booking_taxes');
            $b->get_paged(1,1);
            $total = $b->paged->total_rows;

合計 num 行は 2 行あります。しかし、$total は 1 しか返しません。

その他のことは、次のコードを削除すると2が返されることです。問題はグループ化から始まります。

$b->group_by('booking_id');
                $b->select_sum('booking_total','sum_booking_booking_total');
                $b->select_sum('booking_taxes','sum_booking_booking_taxes');

何が問題なのかは誰でも推測できます。

4

1 に答える 1

0

古い投稿だと思いますが、同じ問題に直面しており、少なくともいくつかの情報を提供できると思いました。

前述のように、問題は「group_by」にあります。これは、total-results のカウントが、group_by によって作成されたグループに分割されるためです。

目的の合計結果を得るには、DISTINCT 選択を実行する必要があります。ただし、これにより、返された行セットに問題が発生します。

したがって、問題は、適切な paged->total_rows を取得するために DISTINCT を使用したいが、オブジェクトの適切なセットには GROUP_BY を使用したいということです。

考えられる解決策

  • datamapper.php ライブラリを開きます
  • 「パブリック関数 get_paged」を検索します
  • groupby が合計の個別の選択に変換されるように関数を動作させます。

交換

$total = $count_query->db->ar_distinct ? $count_query->count_distinct() : $count_query->count();

$distinct_column = 'id';
if($count_query->db->ar_groupby){
    $distinct_column = implode(",",$count_query->db->ar_groupby);
    $count_query->db->ar_distinct = TRUE;
    $count_query->db->ar_groupby = NULL;
}
$total = $count_query->db->ar_distinct ? $count_query->count_distinct(NULL, $distinct_column) : $count_query->count();

このように、groupby-field(s) は、distinct-count で使用され、total-results で無視されるように NULL に設定されます。

于 2014-06-10T13:53:28.290 に答える