php - 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 只动物!史蒂夫
解决方案
您必须更改表结构,这很糟糕。建立良好的结构后,您可以使用如下查询:
SELECT min(DateSeen) as first, max(DateSeen) as last, animal FROM animals
GROUP BY year(DateSeen)
推荐阅读
- lisp - 将文档字符串合并到 def* 宏中的正确方法?
- c# - 如何使用 Enum.GetValues() 方法的结果?
- python - 无法在 Ubuntu 中使用 Python 中的标准输入
- c++ - 我对 std::shared_ptr 删除器有疑问
- java - 如何通过单击适配器类中代码的项目中的删除按钮来删除列表视图中的项目后重新加载片段?
- javascript - 如何防止点击子元素触发点击它所在的标签?
- javascript - 如何删除与其父级的 id 和类都匹配的某个类的元素?
- jmeter - Jmeter - Perfmon 摘要报告
- database - 如何在不知道过程参数的情况下获取 Amazon Redshift 中存储过程的完整 ddl 脚本
- elasticsearch - 在从 Fluentd 推送日志时在 Elasticsearch 索引中添加自定义字段