我需要有关如何从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中的所有作业。
我尽力而为,但我无法弄清楚如何检查所有父级别并计算它。 此外,我可以为此创建新的管理,也许有更好的方式来插入新的工作?
感谢您提供任何帮助,
答案 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)
如果我了解您要按level
,start_afterID
和days
对数据进行排序。
在这种情况下,你必须做一个选择:select * from table order by level asc, start_afterID asc, days desc;