【问题标题】:how to use sum and join the 3 tables using laravel6?如何使用 sum 并使用 laravel 6 连接 3 个表?
【发布时间】:2020-06-24 08:41:54
【问题描述】:

我有 3 张桌子,工资表 salaries(id, name) 和积分表 pointages(id, datep, salarie_id, sold) 和 avances 表 avances(id, datea, montantA, salarie_id)

表薪

Id  name
1   kamal   
2   imad    

积分表

id  datep       Salarie_id  sold
1   11/03/2020      1        120
2   05/03/2020      1        100
3   06/03/2020      2        50
4   07/03/2020      2        20

高级桌子

id  datea         montantA    Salarie_id
1   11/03/2020    120          1
2   02/03/2020    50           1

通过这 3 个表,我想恢复薪水.id 和薪水.名称和总和 (pointages.sold) 和总和 (avances.montantA) 这个

Salarie.id  Salaries.nom    Sum(sold)   Sum(montantA)
1              kamal           220          170
2              imad            70           0

我执行控制器的这个函数 etatq1u,但它给了我错误的总和和一个单一的记录薪金1,因为没有记录 2(薪金 2)的 avance。 这是给我的错误结果:

id:1
nom:kamal
sold:440
montantA:340

SalrieController.php

public function etatq1u(request $request){

      $dataP = DB::table('salaries')
         ->join('pointages','pointages.salarie_id','salaries.id')
         ->join('avances','avances.salarie_id','salaries.id')
          ->selectRaw('salaries.id,salaries.nom,SUM(pointages.sold) as sold,SUM(avances.montantA) as avance')
          ->groupBy('pointages.salarie_id')
          ->get();
          return response($dataP);
}

etatq1.balde.php

 $.ajax({
          type: 'get',
          url: "{{ route('salarie.etatq1u') }}",
          data: {
                 'annee':ann,
                 'mois':moi,
                 'salarie_id':sal,
                 'chantier_id':chan,
                 'unite' : unite
                },
          success: function(data1){
              console.log(data1);
          },
          error: function(){
              console.log('error');
          },
          });

【问题讨论】:

  • 这和jQuery有什么关系?
  • @Andreas 没有什么只是为了完成问题
  • 这对你有帮助吗:- stackoverflow.com/questions/34557952/…
  • 如果这是 Laravel,则根本不需要使用 DB 门面。关系应该自动创建这些连接。类似Salary::select(['id', 'nom'])->with(['pointages', 'avances'])->sum('pointages.sold')->sum('avances.montantA')->groupBy('id');

标签: jquery mysql laravel


【解决方案1】:

使用 UNION 因为表 avances 不包含 imad 的数据

    SELECT
      id
      , name
      , SUM(sold) as sold
      , SUM(montantA) as avance 
    FROM
      ( 
        SELECT
          salaries.id
          , name
          , sold
          , null as montantA 
        FROM
          salaries 
        LEFT JOIN 
            pointages 
        ON salaries.id = pointages.Salarie_id 

        UNION 

        SELECT
          salaries.id
          , name
          , null as sold
          , montantA 
        FROM
          salaries 
        LEFT JOIN 
            avances 
        ON salaries.id = avances.Salarie_id
      ) tbl 
    group by
      tbl.id

【讨论】:

    猜你喜欢
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多