0

我需要有关如何从 DB (MySQl) 获取/显示一些信息的帮助

我当前的表格如下所示:

id | title | level | start_afterID | days | 

1  |   A   |   0   |       0       |   7  |
2  |   B   |   1   |       1       |   5  |
3  |   C   |   1   |       2       |   3  |
4  |   D   |   1   |       3       |   2  |
5  |   E   |   1   |       4       |   2  |
6  |   F   |   1   |       3       |   6  |

级别“0”表示该作业将首先开始,开始日期和时间在其他表中 ( $config_start)

所有其他级别 = 1 的条目都没有固定的开始,只是他们开始id的工作 ( )。start_afterID

此外,每项工作都将在 DAYS 字段中持续天数。

在这个 ID 为 6(标题 F)的表作业中,必须在 jobID 3 之后开始 - 开始时间类似于:

$config_start + jobID 3 + jobID 2;

这份工作的结束是:

$config_start + jobID 3 + jobID 2 + 6;

最后,我需要按传入顺序显示数据库中的所有作业。

我尽力了,但我不知道如何检查所有父母级别并计算它。另外,我可以为此创建新的管理,也许有更好的插入新工作的方法?

感谢您对此的任何帮助,

4

2 回答 2

0

首先,我建议您重新考虑该level列 - IIUC 这只是一个布尔值,告诉您这是否是工作根 - 此信息也存在于 start_afterID 为 0 中。

现在计算开始时间和结束时间是一项非常重要的工作,需要大量的 DB avvess,所以我建议您创建第二个表id|startday|endday并以某种方式移动计算逻辑,以便更新这个(基本上是缓存)表工作变动,为您提供正常操作的快速查询路径。

要计算此时序表的内容,您可以执行以下操作

function docalc($after,$startday) {

    $sql="SELECT * FROM tablename WHERE start_afterID=$after";

    //Run the query, this depends on your framework used

    //Pseudocode from here - again depends on your framework
    foreach ($row) {
        $id=$row['id'];
        $endday=$startday+$row['days']; //This will not be a simple addition, depending on your data types

        //Adapt the following to your data types
        $sql="REPLACE INTO timingcache SET id=$id, startday=$startday, endday=$endday";
        //Run the query - depends on your framework

        docalc($id,$endday);

    } //for each row

}


//this assumes $config_start is set correctly
docalc(0,$config_start);
于 2012-06-05T17:09:41.300 回答
0

如果我理解您想按level,start_afterID和对数据进行排序days

在这种情况下,您必须进行选择:select * from table order by level asc, start_afterID asc, days desc;

于 2012-06-05T17:21:37.090 回答