Добрый день. Есть запрос в ларе который возвращает сумму записей за промежуток, в моем случае за неделю. Запрос : PHP: Stats::whereBetween('created_at', [Carbon::now()->startOfWeek(), Carbon::now()->endOfWeek(),]) ->where('ac_status', $status) ->selectRaw('DATE_FORMAT(created_at, "%Y-%m-%d") as date') ->selectRaw('COUNT(order_id) as '. $status) ->groupBy('date') ->get(); Сейчас результат возвращает только те дни в которых count != 0. Мне необходимо что бы возвращались все дни сгрупированные по дате даже с нулевыми значениями. Пробовал добавлять условие Код (Text): ->havingRaw("COUNT(order_id) >= 0") Результат такой же, с тестовыми данными возвращает за 7 дней - две записи.
Вот: Код (Text): SELECT DATE_FORMAT(created_at, "%Y-%m-%d") as date, COUNT(order_id) as holds FROM stats WHERE ac_status = 'hold' AND created_at BETWEEN '2017-06-28' AND '2017-07-02' GROUP BY date; Результат получаю сгрупировано только по тем датам где count отличный от нуля, а хочу получить все, даже с нулями Результат моего запроса: 2017-06-29 - 4 2017-06-30 - 2 Ожидаемый результат: 2017-06-28 - 0 2017-06-29 - 4 2017-06-30 - 2 2017-06-31 - 0 2017-07-01 - 0
Если Mysql, то наиболее простой вариант создать вспомогательную таблицу с датами и делать с ней JOIN. Если Postgres, то там есть функция generate_series с которой тоже нужно организовать JOIN.
У меня мускуль. Один момент не очень понятен. Это таблица со статистикой следующей структуры: которая содержит исчерпывающую информацию сама по себе, разве вариант когда дата дублируется в отдельную таблицу простой?
Дык вот, проблема в том, что запрос - верный, просто вы почему то ожидаете, что у вас появятся строки с нулевыми значениями. Откуда? Их ведь изначально нет. Добавить их можно создав временную таблицу или серию, как выше написал @t1grok И да, к Laravel это не относится ни каким боком )