使用PHP从MySQL数据库中检索数据 - 时间管理

时间:2012-06-05 16:51:34

标签: php mysql arrays

我需要有关如何从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;

最后,我需要按照收到的顺序显示DB中的所有作业。

我尽力而为,但我无法弄清楚如何检查所有父级别并计算它。 此外,我可以为此创建新的管理,也许有更好的方式来插入新的工作?

感谢您提供任何帮助,

2 个答案:

答案 0 :(得分:0)

首先,我建议你重新考虑一下level专栏 - IIUC这只是一个boolea,告诉你这是否是一个工作根 - 这个信息在start_afterID为0时也是prsent。

现在计算开始和结束时间是一件非常重要的工作,需要大量的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);

答案 1 :(得分:0)

如果我了解您要按levelstart_afterIDdays对数据进行排序。

在这种情况下,你必须做一个选择:select * from table order by level asc, start_afterID asc, days desc;