【问题标题】:Retrieving data from the MySQL database using PHP - time management使用 PHP 从 MySQL 数据库中检索数据 - 时间管理
【发布时间】:2012-06-09 17:10:54
【问题描述】:

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

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

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

感谢您对此的任何帮助,

【问题讨论】:

    标签: php mysql arrays


    【解决方案1】:

    如果我理解您想按levelstart_afterIDdays 对数据进行排序。

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

    【讨论】:

    • 不是排序问题,我需要根据父作业结束来计算每个作业的开始,这也是按照相同的逻辑计算的,但感谢帮助
    • 我创建了在所有行中运行并根据父作业更新新开始和新结束的脚本,因此每次更改某些内容时,此作业都会重新创建所有日期...
    【解决方案2】:

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

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

    要计算这个时序表的内容,你可以这样做

    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);
    

    【讨论】:

    • 是的,我同意你关于删除 LEVEL 列,并使用 $config_start + days 作为其他工作的起点......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 2011-07-08
    • 2012-12-21
    相关资源
    最近更新 更多