Laravel:按月和年排序

时间:2020-02-29 21:19:14

标签: sql laravel eloquent sql-order-by

您好,请使用人工制品领域按年份和月份订购 我的代码:

\App\User::select(DB::raw('SUM(Comptabilise)* -1 as `data`'), DB::raw("DATE_FORMAT(date, '%m-%Y') new_date"),  DB::raw('MONTHNAME(date) month'))
        ->groupby('month')
        ->orderBy('YEAR(new_date)', 'ASC')
        ->orderBy('MONTH(new_date)', 'ASC')
        ->get();

我想按新日期从最小日期到最大的顺序订购,例如从05-2018到10-2019 请您能帮我做,谢谢吗?

2 个答案:

答案 0 :(得分:1)

我通过此代码对其进行了修复,感谢您的宝贵时间!

\App\User::select(DB::raw('SUM(Comptabilise)* -1 as `data`'), DB::raw("DATE_FORMAT(date, '%Y') year"),DB::raw('MONTH(date) months'),  DB::raw('MONTHNAME(date) month'))
        ->groupby('month')
        ->orderBy('year', 'ASC')
        ->orderBy('months', 'ASC')
        ->get();

答案 1 :(得分:1)

请注意,您的group by子句似乎不正确。

您正在按月份名称分组。因此,如果您的数据分布于12个月以上,则最终仍将仅获得12条记录,结果集将具有相同月份但不同年份的记录分组在一起。

您应该将group by子句添加到年,就像这样:

\App\User::select(DB::raw('SUM(Comptabilise)* -1 as `data`'), DB::raw("YEAR(date) year"),DB::raw('MONTH(date) months'),  DB::raw('MONTHNAME(date) month'))
        ->groupBy('year')
        ->groupBy('months')
        ->orderBy('year', 'ASC')
        ->orderBy('months', 'ASC')
        ->get();

注意:MySQL有一个YEAR()函数,我在查询中使用了它,因为它与MONTH()的一致性更强,它使用了DATE_FORMAT()这样的字符串转换方法。