真的在查询中苦苦挣扎,环顾四周我无法找到我需要的答案!
我有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();
这仍然不起作用,因为它似乎同时计算:/
感谢很多帮助,感觉就像把我的头碰到墙上一样!
答案 0 :(得分:2)
一般的不耐烦我已经回答了我自己的问题..
我需要计算used
和saved
的不同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();
希望这也可以帮助其他人!