如何在最近3个月前订购剩余联接数?

时间:2019-05-08 05:58:09

标签: php sql laravel

嗨,我有查询要显示最近3个月内按总订单数显示的餐厅列表订单,

$resto->leftJoin('order', 'order.restaurant_id', 'restaurant.restaurant_id')
                ->groupBy('restaurant.restaurant_id')
                ->where(DB::raw("FROM_UNIXTIME(order.added)"), ">=", Carbon::now()->subMonths(3))
                ->orderBy(DB::raw("COUNT(order.order_id)"), 'DESC');

我上面的代码可以正常工作,但是如果过去三个月没有订单的餐厅不会显示,

我的预期结果是显示所有餐厅的订单过去3个月计数,但仍显示最近3个月没有订单的餐厅 该怎么做?

1 个答案:

答案 0 :(得分:1)

您遇到的问题是因为您使用where条件限制了查询,因此它将始终只选择最近3个月中有订单的一次。我认为最好的方法是创建一个虚拟列,然后按其排序结果。

由于我没有您的代码库,所以我无法测试您的确切查询,但是我会给您一个盲目的尝试,以便您可以在您的代码库中尝试它。

$resto->leftJoin('order', 'order.restaurant_id', 'restaurant.restaurant_id')
      ->groupBy('restaurant.restaurant_id')
      ->selectRaw("IF(FROM_UNIXTIME(order.added) >= ?) as latest_orders_count"), [Carbon::now()->subMonths(3)->timestamp])
      ->orderBy(DB::raw("COUNT(order.order_id)"), 'DESC') // first order by count
      ->orderBy('latest_orders_count', 'DESC'); // then by latest