我正在使用Laravel构建应用程序。我正在使用Eloquent和MySql数据库。在我的MySQL数据库中,有一个这样的表EVENTS:
id EVENT YEAR
1 event1 2000-05-27
2 event2 2018-01-01
3 event3 2000-02-12
4 event4 2000-06-03
此示例仅是为了简单起见,显然我的数据库随时都有数百个事件发生。
年份栏中的数据具有“日期”格式
我需要从此MySQL表中获取每年发生的事件的履历表。在示例中将是
year number of events
2000 3
2018 1
我这样做了:
$years = Event::groupBy('year')
->selectRaw('count(*) as total, year')
->get();
我明白了:
year number of events
2000 1
2018 1
2000 1
2000 1
因为该列中的每个日期都不相同(在示例表中:2000-02-12!== 2000-06-03!== 2000-05-27)。
我需要将每年发生的所有事件归为一类,而不必考虑mont和day。
问题是:
即使事件在不同的日期和月份发生,我如何按列“年份”进行分组,但仅考虑年份?
答案 0 :(得分:1)
由于您使用了selectRaw,因此只需将日期转换为年份,即可像普通查询一样进行分组。
$years = Event::selectRaw('count(*) as total, YEAR(year) as year')
->groupBy('year')
->get();
答案 1 :(得分:1)
这是使用DATE_FORMAT
的替代方法:
$years = Event::selectRaw("DATE_FORMAT(YEAR, '%Y') AS year, COUNT(*) AS total")
->groupBy('year')
->get();
DATE_FORMAT
比使用YEAR()
功能更灵活,并且可以轻松地使我们在一个列中按年和月分组。
答案 2 :(得分:0)
您可以尝试这个
$event = Event::selectRaw('count(*) as yearTotal, YEAR(year) as yearName')->groupBy(\DB::raw('YEAR(year)'))->get();