【发布时间】:2019-01-17 20:04:29
【问题描述】:
我正在尝试为 Items 构建一个数据库(下面的 SQLFiddle)(让它们是任何类型的机器,在本例中是汽车和自行车),可能必须在针对一个或多个CheckTypes 的给定间隔。
一个Item 有很多ItemsCheckTypes:
-
ItemCar1 必须每 2 年在车库检查一次,并且每年都要目视检查一次 -
ItemCar2 只需在车库检查即可 -
ItemBike2 根本不需要检查。
一个Check属于一个CheckType,并且有很多ItemsChecks:
-
Check于 2018 年 1 月 1 日与CheckType“车库检查”,检查了 Car1 和 Car2(ItemsChecks完成任务)
我现在想要的是查询上一次,Item 已被检查每个是ItemsCheckTypes。
预期是这样的结果:
Items.id | CheckTypes.id | LAST CHECK.date | LAST CHECK.id
1 | 1 | 2018-01-01 | 4
1 | 2 | 2017-08-01 | 3
2 | 1 | 2016-01-01 | 1
我尝试了许多 JOINS、子查询和其他方法,试图找出哪个表是我的起点(我在想 ItemsChecks 或 Items) - 但现在我只是不知道是不是完全有可能,或者我应该执行以下操作之一来(希望)简化它:
- 创建某种缓存/辅助表,用于存储最后一次检查的 id、日期和 type_id - 如果日期大于当前的最后日期,则在新的检查分配上被覆盖(可能是新的错误来源)李>
- 提出更好的数据库设计
- 对每个项目进行新的查询(我认为这可能更容易,但不会让我选择查找所有必须尽快检查的项目)
在应用程序级别我使用的是 CakePHP 3.x,但我怀疑 Cake 解决方案会比 SQL 解决方案更容易。 模型关联似乎很好,其他一切都按预期工作。
最后是 SQL-Fiddle:http://sqlfiddle.com/#!9/b3d1f8/17
感谢任何帮助或建议,我不知道该走哪条路......
【问题讨论】:
-
抱歉,我理解第 (1 | 2 | 2017-08-01 | 3) 行的结果。
-
Item #1 last Check for CheckType #2 is at 2017-08-01, Check #3
标签: mysql join cakephp-3.0 greatest-n-per-group