Laravel查询生成器MySQL - 计数/具有分组依据

时间:2015-04-12 09:19:03

标签: php mysql laravel laravel-5

真的在查询中苦苦挣扎,环顾四周我无法找到我需要的答案!

我有4个表,优惠,用户,已保存的信息和使用过的信息。 savedoffers / usedoffers表是用户和用户之间的关系表。提供。

我想返回一份报价清单,然后左连接usedoffers和savedoffers。然后按优惠(比如优惠ID)对它们进行分组,然后计算已保存优惠的用户数量以及使用优惠的数量。

经过我的努力,我在这里......

$offers = DB::table('offers')
            ->select('offers.id as id', 
                     'offers.code', 
                     'offers.title', 
                     'offers.date', 
                      DB::raw('count(usedoffers.id) as used_count'),
                      DB::raw('count(savedoffers.id) as saved_count'))
            ->leftjoin('savedoffers', 'offers.id', '=', 'savedoffers.offer_id')
            ->leftjoin('usedoffers', 'offers.id', '=', 'usedoffers.offer_id')
            ->orderBy('offers.date', 'asc')
            ->groupBy('offers.id')
            ->get();

这仍然不起作用,因为它似乎同时计算:/

感谢很多帮助,感觉就像把我的头碰到墙上一样!

1 个答案:

答案 0 :(得分:2)

一般的不耐烦我已经回答了我自己的问题..

我需要计算usedsaved的不同ID,它们给了我正在寻找的输出...

如下所示......

$offers = DB::table('offers')
                    ->select('offers.id as id', 
                             'offers.code', 
                             'offers.title', 
                             'offers.date', 
                              DB::raw('count(DISTINCT usedoffers.id) as used_count'),
                              DB::raw('count(DISTINCT savedoffers.id) as saved_count'))
                    ->leftjoin('savedoffers', 'offers.id', '=', 'savedoffers.offer_id')
                    ->leftjoin('usedoffers', 'offers.id', '=', 'usedoffers.offer_id')
                    ->where('company_id', '=', User::find(\Auth::user()->id)->company_id)
                    ->orderBy('offers.date', 'asc')
                    ->groupBy('offers.id')
                    ->get();

很难尝试像这样解决问题,所以最终只能用MySQL来解决它。

我试图用var_dump(DB::getQueryLog());输出语句,但它无效。这是因为在Laravel中,您需要在查询之前通过添加以下语句DB::enableQueryLog();

来启动Querylog

希望这也可以帮助其他人!