MySQL:获取关键路径时间
我必须管理一个类似甘特图的界面,在这里我们可以有多个项目(MySQL:获取关键路径时间,mysql,Mysql,我必须管理一个类似甘特图的界面,在这里我们可以有多个项目(project\u id)。并且需要最短的时间来完成一个项目 我的表格如下: 任务 +---------+-------+----------------+ | id_task | name | days_allocated | +---------+-------+----------------+ | 1 | task1 | 2 | | 2 | task2 | 3
project\u id
)。并且需要最短的时间来完成一个项目
我的表格如下:
任务
+---------+-------+----------------+
| id_task | name | days_allocated |
+---------+-------+----------------+
| 1 | task1 | 2 |
| 2 | task2 | 3 |
| 3 | task3 | 0.5 |
| 4 | task4 | 4 |
+---------+-------+----------------+
任务\u前置任务(两个字段都链接到Task.id\u任务
)
进步
+-------------+---------+------------+---------+
| id_progress | task_id | project_id | current |
+-------------+---------+------------+---------+
| 1 | 1 | 1 | 0 |
| 2 | 2 | 1 | 1 |
| 3 | 3 | 1 | 1 |
| 4 | 4 | 1 | 1 |
| 5 | 1 | 2 | 0 |
| 6 | 2 | 2 | 0 |
+-------------+---------+------------+---------+
因此,任务表是我们的“模板”,我们在进度表中跟踪进度
在这种情况下,对于project\u id=1
,id\u task 1
已经完成(进度。当前的是0
,其中project\u id=1和task\u id=1
)
所以它要么是tasksid\u task 2
+id\u task 4
要么是id\u task 3
+id\u task 4
id\u任务2
比id\u任务3
花费更多的时间,因此关键路径是id\u任务2-->id\u任务4
,7天
我有两个选项:
选项1
我可以在我的任务表中添加minimal_days
列,因为我知道前辈。因此,这张桌子将是
+---------+-------+----------------+--------------+
| id_task | name | days_allocated | minimal_days |
+---------+-------+----------------+--------------+
| 1 | task1 | 2 | 9 |
| 2 | task2 | 3 | 7 |
| 3 | task3 | 0.5 | 4.5 |
| 4 | task4 | 4 | 4 |
+---------+-------+----------------+--------------+
我可以通过这种查询检索最短天数:
SELECT MAX(minimal_days) FROM progress
LEFT JOIN task ON task.id_task = progress.task_id
WHERE project_id = 1 AND current = 1
选项2
我重写MySQL查询中的逻辑?但老实说,我不知道怎么
选项n°1易于实施,结果几乎是即时的,但系统非常有限,如果添加或删除任务,则必须重新计算和更新分配的所有天数
我认为,在MySQL中编写选项n°2是最困难的。请求可能较慢。特别是如果我们必须同时为几个项目检索它。曾经的阿金是一个仰卧。。。但该系统将更加模块化
我预选了2号选项,你呢?我应该预选另一个选项吗?还有别的办法吗?你能帮我用MySQL写这个逻辑吗
PS:我们一次可以处理50-100个项目。一个项目最多可以有30个任务,任务是非常线性的。我们没有非常复杂的模式。所以我认为结果可以“实时”显示
SELECT MAX(minimal_days) FROM progress
LEFT JOIN task ON task.id_task = progress.task_id
WHERE project_id = 1 AND current = 1