Laravel查询-仅一周中每一天的最高金额

时间:2019-05-04 10:39:40

标签: laravel eloquent

我正在尝试创建一个功能,向我显示一周中的每一天的最佳日子。

所以说我们有:

Order::join('order_items', 'orders.id', '=', 'order_items.order_id')
    ->where('orders.paid', 1)
    ->groupBy('orders.paid_at')
    ->select(DB::raw(
        'orders.paid_at,
        DATE_FORMAT(orders.paid_at, \'%W\') AS week_day,
        SUM(order_items.amount) AS amount'
    ))->orderBy('amount', 'DESC');

所以最终它将输出

2019-04-29, Monday, £500
2019-01-01, Tuesday, £700
2019-02-06, Wednesday, £400
2019-01-03, Thursday, £600
2019-02-15, Friday, £200
2019-04-20, Saturday, £100
2019-03-17, Sunday, £600

我当前的查询选择每个星期一,星期二,星期三,并给出每次出现的金额。

我只想显示一周中每一天的最佳表现日期(给我们7行)。

是否有一种方法可以将查询包装在该查询周围以实现该目的或另一种方式?

1 个答案:

答案 0 :(得分:0)

我设法产生了预期的结果,我在选择中添加了一个额外的列,以便能够按预期对日期进行排序。解决方案不是完全mysql解决方案,但我相信使用收集方法可以轻松完成。所以请尝试这个,让我知道。

Order::join('order_items', 'orders.id', '=', 'order_items.order_id')
    ->where('orders.paid', 1)
    ->groupBy('orders.paid_at')
    ->select(DB::raw(
        'orders.paid_at,
        DAYNAME(orders.paid_at) AS week_day, // this function gives the same as formatting
        WEEKDAY(orders.paid_at) as day,
        SUM(order_items.amount) AS amount'
    ))->orderBy('amount', 'DESC')
      ->get()
      ->unique('week_day')->sortBy('day'); // this two will give the expected result