2017-02-15 3 views
2

私はNGOのシステムに取り組んでいます。借り手は借り手に利息を払わずに借り手に返済します。 または従業員が誤った値で支払いを挿入払い戻しので、彼はこの取引 のための逆をしなければならないと私は、次の列とローンテーブル持って、この支払い貸し出し領収書のレポートを生成する(払い戻しまたは逆の取引)

に負の値を挿入することによってそれを作った:

id ║ amount ║ loan_date ║ created_on ║ emp_id  ║ client_id ║ 
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣ 
1 ║ 10,000 ║ 2011-01-01 ║ 2010-01-01 ║ 100  ║ 600  ║ 

領収書

id ║ loan_id ║ p_amount ║ p_date  ║ rev_p_id ║ created_on ║ 
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣ 
1 ║ 1  ║ 500  ║ 2011-01-01 ║ null  ║ 2011-01-01 ║ 
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣ 
2 ║ 1  ║ 500  ║ 2011-02-01 ║ null  ║ 2011-01-01 ║ 
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣ 
3 ║ 1  ║ 500  ║ 2011-03-01 ║ null  ║ 2011-01-01 ║ 
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣ 
4 ║ 1  ║ -500  ║ 2011-04-01 ║ 2  ║ 2011-01-01 
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣ 
5 ║ 1  ║ 500  ║ 2011-05-01 ║ null  ║ 2011-01-01 ║ 
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣ 
6 ║ 1  ║ 500  ║ 2011-06-01 ║ null  ║ 2011-01-01 ║ 
═══╬═══════════╬════════════╬═════════════╬═════════════╬═════════════╣ 
7 ║ 1  ║ 500  ║ 2011-07-01 ║ null  ║ 2011-01-01 ║ 

私の問題私は、2011年6月1日に2011-01-01間の例 ケース1 の日付の間の合計クエリを使用してレポートを生成したい時にすべき支払番号2との間に2011-03-01日付

ケース2 の範囲の間でそれのためのリバースため= 2500 とその真の私を与えます2011-06-01には私に1500を与え、負の領収書を合計しません。これは支払いID 2と逆のため、この期間にはありません。

逆の値を合計するかどうか、またはmysqlの とPHPで私は逆転があるかどうかを判断するために、任意の戻入れのための逆のトランザクションの日付を取得し、この日付を使用するために、私はあなたのreceiptsテーブルの上に自己参加するだろう

答えて

0

CodeIgniterのとMySQLを使用していません報告期間中:

select r1.loan_id, sum(r1.p_amount) sum_amount 
from receipts r1 
left join receipts r2 on r1.rev_p_id=r2.id 
where coalesce(r2.p_date,r1.p_date)>=... and coalesce(r2.p_date,r1.p_date)<=... 
group by r1.loan_id 

coalesce()関数は、最初のNULLでない日付を返すために使用されます。通常のお支払いの場合、r2.p_dateはnullになります(何も取り消されません)ので、実際のp_dateが使用されます。逆転の場合、r2.p_dateはnullではない(逆支払の日付がある)ので、coalesce()はこの日付を返します。

+0

ありがとう私は今あなたのソリューションを試してみます – maali

+0

私はすべての領収書を取得する必要があるため、私たちは団体を使用しているので、あなたの解決策は役に立たないですが、 – maali

+0

私は申し訳ありませんが、 Plsは精巧です。また、あなたの質問は**すべての領収書を取得することに関する** **ではないことを覚えておいてください。 – Shadow

関連する問題