簡體   English   中英

如何使用php和mysql計算單個循環中多個表的月度總和?

[英]How to calculate Monthly Sum of multiple table in single loop, using php and mysql?

我在mysql數據庫中有兩個表Table A和Table B

表A

id     date     advanced         payed_remaining        remaining_date
1    1/1/2018     400                 800                   4/1/2018
2    2/1/2018     600                 600                   3/1/2018
3    4/1/2018     800                 200                   6/1/2018
4    6/1/2018     400                 300                   8/1/2018
5    3/2/2018     600                 200                   6/2/2018
6    8/2/2018     800                 400                   10/2/2018

表B

id     date      amount    
1    1/1/2018     900     
2    2/1/2018     600     
3    4/1/2018     300 
4    2/2/2018     400
5    5/2/2018     800 

查詢從兩個表中獲取每月數據,

$monthly_res = $con->prepare("SELECT t2.month, t2.total_advance, t2.total_pay_remaining, t1.total_income_amount FROM (SELECT  month(B.date) as month, SUM(B.income_amount) as total_income_amount FROM B group by month(B.date)) t1 INNER JOIN (SELECT month(A.date) as month, month(A.due_date) as month, t1.total_income_amount, SUM(A.advance) as total_advance, SUM(A.pay_remaining) as total_pay_remaining, t1.total_income_amount FROM A) t2 ON t2.month  = t1.month");
    $monthly_res->execute();
    while ($row = $monthly_res->fetch(PDO::FETCH_ASSOC)) {
        $month = $row['month'];
        $dt = DateTime::createFromFormat('!m', $month);
        $month_name = $dt->format('F');
        $total = $row['total_advance'] + $row['total_income_amount'] + $row['total_pay'];
        echo "<tbody>
            <tr>
                <td>".$month_name."</td>
                <td>".$total."/-</td>
            </tr>
        </tbody>";
    }

1054-“字段列表”中的未知列“ t1.total_income_amount”

當我從查詢中刪除t1.total_income_amount僅顯示12月的結果時...

我想獲取一個月的預付款的總和,payed_remaining的總和,金額的總和。

Result= sum(advanced) + sum(payed_remaining) + sum(amount) by month 

January : 5900

February : 3200

你可以嘗試以下查詢

SELECT month(A.date) as month, SUM(A.advanced) as total_advance, SUM(A.payed_remaining) as total_pay_remaining, month(B.date) as month, SUM(B.income_amount) as total_income_amount 
From A
join B on month(A.date) = month(B.date)
group by month(A.date)

您應該加入匯總結果,例如:

      SELECT t2.month
      , t2.total_advance
      , t2.total_pay_remaining
      , t1.total_income_amount FROM (
            SELECT  month(B.date) as month
              , SUM(B.income_amount) as total_income_amount 
            FROM B group by month(B.date)
      ) t1 
      INNER JOIN (  
            SELECT month(A.date) as month
              , SUM(A.advance) as total_advance
              , SUM(A.pay_remaining) as total_pay_remaining
            FROM A
      ) t2 ON t2.month  = t1.month

您應該顯式加入join子句和AND運算符並加入b表的總和

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM