Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用php和mysql在单个循环中计算多个表的月和?_Php_Mysql - Fatal编程技术网

如何使用php和mysql在单个循环中计算多个表的月和?

如何使用php和mysql在单个循环中计算多个表的月和?,php,mysql,Php,Mysql,我在mysql数据库中有两个表A和表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

我在mysql数据库中有两个表A和表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>";
    }

你能试试下面的查询吗

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表的总和联接起来

选择t2.month、t2.total\u advance、t2.total\u pay\u resident、t1.total\u income\u amount FROM SELECT monthB.date as month SUMB.income\u amount as total\u income\u amount by monthB.date t1内部联接选择monthA.date as month,monthA.leveling_date as month,SUMA.advanced as total_advanced,SUMA.pay_level as total_pay_level,t1.total_income_amount FROM A t2 ON t2.month=t1.monthI尝试上述查询,但其显示语法错误答案更新。。最终向我显示确切的错误消息1064-您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,了解在第71054行“字段列表”中未知列“t1.total_income_amount”附近使用“SUMB.income_amount as total_income_amount FROM income group by mon”的正确语法
      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