首页 > 解决方案 > mysql / php选择每年的第一条和最后一条记录在数据库中的特定列中有记录

问题描述

我有一张不同动物的野生动物目击记录表。表中的每一行都是一个记录卡,其中包含可以看到的不同动物的列,以及一个 ID 列和一个 DateSeen 列。

我想从下表中显示每年的第一条和最后一条记录,其中看到了一种或多种特定动物。随着更多数据的添加,我需要显示每年的第一个和最后一个日期,包括未来几年。显示的第一个和最后一个日期应基于选择要查询的列(动物)的 URL 参数。

这是如何使用 mySQL 选择查询和 PHP 完成的?

桌子

ID    DateSeen       Lion             Tiger
01    2018-01-01     1                4
02    2018-08-15     2                0
03    2018-09-04     0                2
04    2017-02-02     1                3
05    2017-06-19     2                0 
06    2017-07-24     1                1
07    2017-07-26     0                4
08    2016-01-06     1                1
09    2016-09-17     1                0 
10    2016-09-19     0                4
11    2015-06-11     0                1
12    2015-10-09     1                0
13    2015-10-12     1                0

如果 URL 参数 = Tiger,结果应该返回

ID    DateSeen (DD-MM-YYYY)       Tiger
01    01-01-2018                  4        = first sighting of Tiger in 2018
03    04-09-2018                  2        = last sighting of Tiger in 2018
04    02-02-2017                  3        = first sighting of Tiger in 2017
06    24-07-2017                  1        = last sighting of Tiger in 2017
08    06-01-2016                  1        = first sighting of Tiger in 2016
10    19-09-2016                  4        = last sighting of Tiger in 2016
11    11-06-2015                  1        = first sighting of Tiger in 2015
11    11-06-2015                  1        = last sighting of Tiger in 2015

如果 URL 参数 = Lion,则结果应返回

ID    DateSeen (DD-MM-YYYY)      Lion
01    01-01-2018                 1        = first sighting of Lion in 2018
02    15-08-2018                 2        = last sighting of Lion in 2018
04    02-02-2017                 1        = first sighting of Lion in 2017
06    24-07-2017                 1        = last sighting of Lion in 2017
08    06-01-2016                 1        = first sighting of Lion in 2016
09    17-09-2016                 1        = last sighting of Lion in 2016
12    09-10-2015                 1        = first sighting of Lion in 2015
13    12-10-2015                 1        = last sighting of Lion in 2015

特定动物的第一次和最后一次目击日期是否相同并不重要(即老虎只在 2015 年出现过一次,因为我需要证明该目击是结果中的第一次和最后一次目击。

数据库中的日期格式为 YYYY-MM-DD,我需要显示结果,并将年份格式化为 DD-MM-YYYY。

非常感谢任何可以提供帮助的人。哦,我正在使用 PHP (pdo)、MySql 和 PhpMyAdmin。我有超过 3 万条记录和 40 只动物!史蒂夫

标签: phpmysqldatabasedate

解决方案


您必须更改表结构,这很糟糕。建立良好的结构后,您可以使用如下查询:

SELECT min(DateSeen) as first, max(DateSeen) as last, animal FROM animals
GROUP BY year(DateSeen)

推荐阅读