【发布时间】:2019-03-09 12:06:27
【问题描述】:
我正在使用 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)。
我需要将每年发生的所有事件组合在一起,而不考虑月份和日期。
问题是:
即使事件发生在不同的日期和月份,我如何按“年”列分组,但只考虑年份?
【问题讨论】:
-
通过使用函数,MySQL 将不得不通过痛苦的行来构建所有年份的列表。如果表中有几行,这没什么大不了的,但是随着行数的增加,性能将开始下降。如果您使用的是 MySQL 5.7,您可以为年份创建一个生成列,然后索引生成的列。 dev.mysql.com/doc/refman/5.7/en/…