SQL Query Builder - группировка и упорядочение (Laravel)

Я считаю, что вы ищете не-жадное регулярное выражение, например:

/<div class="the_class">(.*?)<\/div>/m

Обратите внимание на добавленный ?. Теперь захватная группа будет захватывать как можно меньше (не жадные), а не как можно больше (жадные).

0
задан jarlh 17 January 2019 в 11:34
поделиться

1 ответ

Я не думаю, что вам нужно created_at в вашем SELECT, чтобы получить желаемые результаты. Вы должны иметь возможность просто упростить запрос:

$concerns = DB::table('concerns')
    ->select(DB::raw('MONTHNAME(created_at) as month, count(*) as total'))
    ->whereBetween('created_at', [$start, $end])
    ->groupBy('month')
    ->orderBy('created_at', 'asc')

Обратите внимание, что предполагается, что между $start и $end не более 12 месяцев. В противном случае вам также необходимо сгруппировать по YEAR(created_at).

Если вы используете MySQL 8, или only_full_group_by включен, вам нужно будет приложить больше усилий, чтобы получить действительный запрос, отвечающий требованиям для GROUP BY. Это должно работать:

$concerns = DB::table('concerns')
    ->select(DB::raw('MONTHNAME(created_at) AS month, YEAR(created_at) AS year, count(*) as total'))
    ->whereBetween('created_at', [$start, $end])
    ->groupBy('year', 'month')
    ->orderBy('year', 'asc')
    ->orderByRaw("MONTH(STR_TO_DATE(CONCAT('1 ', month, ' ', year), '%e %M %y')) asc")

Я сделал демо этого запроса, работающего над dbfiddle

0
ответ дан Nick 17 January 2019 в 11:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: