我需要有关如何从数据库(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)的作业必须在作业 ID 3 之后启动 - 该开始时间如下所示:
$config_start + jobID 3 + jobID 2;
这项工作$end是:
$config_start + jobID 3 + jobID 2 + 6;
最后,我需要按传入顺序显示来自数据库的所有作业。
我尽力了,但我无法弄清楚如何检查所有父级别并计算它。另外,我可以为此创建新的管理,也许有更好的方法来插入新工作?
感谢您对此的任何帮助,
首先,我建议您重新考虑level
列 - IIUC 这只是一个布尔值,告诉您这是否是作业根 - 此信息也在start_afterID为 0
现在计算开始和结束时间是一项不平凡的工作,需要大量的数据库 avves,所以我建议你创建一个带有 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);
如果我理解你想按level
、start_afterID
和days
对数据进行排序。
在这种情况下,您必须执行选择:select * from table order by level asc, start_afterID asc, days desc;