【问题标题】:Group By alternative in Laravel 5.4Laravel 5.4 中的 Group By 替代方案
【发布时间】:2018-06-30 06:43:29
【问题描述】:

我有一个包含 3 列(id、ref_number、pay_date)的表Schedule。每个 ref_number 每个月都有一个 pay_date。所以表格看起来像这样:

id | ref_number | pay_date
-----------------------------
1  | A001       | 2018-06-29
1  | A001       | 2018-07-29
1  | A002       | 2018-06-30
1  | A002       | 2018-07-30
1  | A002       | 2018-08-30
1  | A003       | 2018-06-29

我只想获取从今天到某个日期(从今天起 30 或 31 天)之间具有 pay_date 的每个 ref_number 的最早记录。下面的查询在 Mysql 中运行良好(我稍后会动态传递日期)。

 SELECT id,ref_number,MIN(pay_date) FROM schedule
 WHERE  (pay_date BETWEEN '2018-06-30' AND '2018-07-30')
 GROUP BY ref_number

我知道我们可以在数据库配置文件中将 mysql "strict" 设置为 false 并且 Group By 会按预期运行,但是无需更改,还有其他方法可以解决这个问题吗?

这个查询的雄辩等价物是什么?有或没有 groupby。

【问题讨论】:

    标签: php mysql laravel eloquent laravel-5.4


    【解决方案1】:

    搜索了一段时间后,我发现了一个使用 nested select 语句的答案,并在 Laravel 中尝试了一下。它完全按照我的意愿工作。这是一段甜蜜的代码:

    Schedule::select(DB::raw(id, ref_number, MIN(pay_date) as pay_date))
              ->from(DB::raw("(SELECT * 
                           FROM schedule 
                           WHERE (pay_date > CURDATE())) 
                           temp")
                          )
              ->groupBy('temp.ref_number')
              ->get();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 1970-01-01
      相关资源
      最近更新 更多