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

所以它要么是tasks
id\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