アカウント、トランザクション、ステートメントの 3 つのテーブルがあります。アカウントには多くのトランザクションとステートメントがあります (外部キーは account_id です)。
account_name、請求済みトランザクションの残高、未請求 (保留中) トランザクションの合計と数、未払い残高および/または未請求トランザクションのいずれかを持つすべてのアカウントの最終明細日を取得する必要があります。
このクエリは、期待どおりにデータを返します。
選択する
Account.id、Account.account_name、
Billed.balance、Pending.items、
Pending.amount, Stmnt.latest
から
アカウントとしてのアカウント
左結合
(選択する
アカウントID、
(SUM(`Transaction`.`debit`) - SUM(`Transaction`.`credit`)) を残高として
から
`トランザクション` AS `トランザクション`
どこ
`Transaction`.`statement_id` > 0 AND
`Transaction`.`void` = 0
グループ化
アカウントID
) AS Billed ON Billed.account_id = Account.id
左結合
(選択する
`account_id`、
(SUM(`Transaction`.`debit`) - SUM(`Transaction`.`credit`)) を金額として、
COUNT(id) 個の AS アイテム
から
`トランザクション` AS `トランザクション`
どこ
`Transaction`.`statement_id` = 0 AND
`Transaction`.`void` = 0
グループ化
アカウントID
) Pending.account_id = Account.id で保留中として
左結合
(選択する
`account_id`、
MAX(Statement.statement_date) AS latest
から
`ステートメント` AS `ステートメント`
どこ
`ステートメント`.`無効` = 0
グループ化
アカウントID
) AS Stmnt ON Stmnt.account_id = Account.id
グループ化
アカウントID
持っている
請求残高 > 0 OR
Pending.pending_ct > 0
オーダーバイ
account_name ASC
これを CakePHP 2.1 の検索またはページネーションに適したオプションにうまく変換できません。
どんな考えでも大歓迎です。