真的很纠结于这个查询,环顾四周,我找不到我需要的答案!
我有4张桌子,优惠,用户,储蓄者和使用者。savedoffers/usedoffers表是用户与服务之间的关系表。
我想要返回一份报盘列表,然后剩下的加入用户和储蓄者。然后,将它们按优惠(比如提供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();这仍然不起作用,因为这两者似乎都算在内:
当我想把我的头撞在墙上时,很多帮助是值得赞赏的!
发布于 2015-04-13 08:01:17
我已经回答了我自己的问题。
我需要计算used和saved的不同I,这给了我想要的输出.
所以如下..。
$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
希望这也能帮到别人!
https://stackoverflow.com/questions/29587853
复制相似问题