Как сделать заказ за последние 3 месяца с количеством левых? - PullRequest
0 голосов
/ 08 мая 2019

Привет, у меня есть запрос на показ списка ресторанов по количеству заказов за последние 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 месяца, но все еще показывает, у кого нет заказа за последние 3 месяца, как это сделать?

1 Ответ

1 голос
/ 08 мая 2019

Проблема, с которой вы столкнулись, заключается в том, что вы ограничиваете запрос с помощью условия 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...