根据日期和名称汇总行

时间:2018-08-02 00:47:21

标签: php mysql laravel

我正在尝试根据一张表中的名称求和项目数量,然后对项目乘积求和。

我有两个桌子(酒吧和小酒馆),如图所示。

1:酒吧

id |  name  |cost|
 1   item1   2000
 2   item2   5000

2:饮料销售

id | drink | no_drinks | date
1    item2     2         2018-08-01
2    item1     2         2018-08-01
3    item2     2         2018-08-01
4    item2     1         2018-08-01

我的目的是要根据日期总计(5)和(1)假设(2)的项目2的no_drink进行总和,从那里我必须运行一个查询,该查询将从“ Bar”中获取item1和item2的成本”表。 我需要这样的结果

(5 * 5000)+(2 * 2000)= 29000

这里是我的脚本,关于连接的一切都可以。

1:Reportcontroler.php

   $resx=DB::table('drinksales')
                ->join('bars','bars.name', '=' ,'drinksales.drink')
                ->where('date','LIKE','%'.$date.'%')
                ->get(array(
                    'bars.cost',
                    DB::raw('SUM(bars.cost) AS costs'),
                    DB::raw('SUM(drinksales.no_drinks) AS no_drinks')
                ));
            if($resx){
            foreach ($resx as $row) {
                $datas = array(
                    'amount' => $row->costs,
                    'no_drinks' => $row->no_drinks

                );
            }
                return View::make('reports.restaurantsreportcostd',$datas);
            }
            $datas=array(
                'amount'=>'No money collected'
            );
            return View::make('reports.restaurantsreportcostd',$datas);

查询以上脚本后,我得到119000,这不是我想要的答案。

在这里查看文件

2:reports.restaurantsreportcostd

        <p class="alert alert-success text-center">Total income {{$amount*$no_drinks}} /= </p>

请提供帮助,如果解释不当,请对不起

2 个答案:

答案 0 :(得分:0)

使用group by语句,请尝试此操作。 SELECT SUM(Drinnksales.no_drinks * COST)在此处插入您的联接代码GROUP BY Drinksales.Drink

答案 1 :(得分:0)

这算错了,因为它所做的就是将所有费用总计起来,然后将所有饮料总计并相乘。

我重新定义您的逻辑以实现您想要的结果,就像这样:

$resx = DB::table('drinksales')
    ->join('bars', 'bars.name', '=', 'drinksales.drink')
    ->where('date', 'LIKE', '%' . $date . '%')
    ->get();

$datas = array(
    'amount' => 0,
    'no_drinks' => 0,
    'total_income' => 0
);

if ($resx) {
    foreach ($resx as $row) {
        $datas['amount']+= $row->cost;
        $datas['no_drinks']+= $row->no_drinks;
        $datas['total_income']+= $row->cost * $row->no_drinks;
    }
} else {
    $datas['amount'] = 'No money collected';
}

return View::make('reports.restaurantsreportcostd', $datas);

您现在可以直接使用我设置的其他变量直接获得总收入:

<p class="alert alert-success text-center">Total income {{ $total_income }} /= </p>