【问题标题】:Laravel Query Builder MySQL - Count /w Group ByLaravel 查询生成器 MySQL - 计数 /w 分组依据
【发布时间】:2015-04-13 16:01:17
【问题描述】:

真的很苦恼查询并环顾四周,我找不到我需要的答案!

我有 4 个表,offers、users、savedoffers 和 usedoffers。 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();

这仍然不起作用,因为它似乎都算在内:/

非常感谢您的帮助,就像我把头撞到墙上一样!

【问题讨论】:

    标签: php mysql laravel laravel-5


    【解决方案1】:

    普遍不耐烦 我已经回答了我自己的问题..

    我需要计算 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

    希望这也能帮助其他人!

    【讨论】:

      猜你喜欢
      • 2021-07-04
      • 2021-11-04
      • 1970-01-01
      • 2015-12-13
      • 2019-09-12
      • 1970-01-01
      • 2014-12-15
      • 2022-01-08
      • 1970-01-01
      相关资源
      最近更新 更多