Mysql 复杂数据库查询与数据和存储过程的计划存储
我正在使用MySQL构建一个允许管理和创建任务的系统。任务可以是Mysql 复杂数据库查询与数据和存储过程的计划存储,mysql,database-design,stored-procedures,views,Mysql,Database Design,Stored Procedures,Views,我正在使用MySQL构建一个允许管理和创建任务的系统。任务可以是 在固定日期内完成的一次性任务 重复任务,从固定日期开始,每N天重复一次 简化的模式如下所示 Tasks ======================== | id | name | date | repeats | | 1 | Backup X | 2011-... | 0 | | 2 | Backup Y | 2011-... | 1 | 其中N是任务的重复间隔 如您
- 在固定日期内完成的一次性任务
- 重复任务,从固定日期开始,每N天重复一次
排序,要么按datediff
排序。我真正需要的是能够在一个字段上排序,datediff
取决于任务是否重复
在psuedocode中,以下查询更合适:
SELECT
IF(Task.repeats = 1)
// Get the number of days until next repeat on a repeating event
$N - mod(datediff(NOW(), Task.date), $N) AS datediff
ELSE
// Get number of days until non-repeating task expires
datediff(NOW(), Task.date) AS datediff
- 存储过程是一种选择,但比在应用程序代码中更难管理
- 视图是另一种选择。但是MySQL视图不是很有效
我很欣赏您的想法,因为我最近倾向于避免复杂的查询和存储过程。也许这太过分了 听起来您应该使用MySQL事件存储/运行这些
在本例中,我可能因为没有充分研究MySQL的控制流函数而使可行的选项过于复杂 我现在要考虑的一个解决方案是
SELECT IF(Task.repeat, repeats_expression, non_repeats_expression) as date_diff;
啊,是的,在我使用MySQL>5.1的情况下,这可能很有效,但在这种情况下,我不是。从本质上讲,填充表与CRON作业的原理相同——这是一件常见的事情吗?从您的角度来看,为什么编写复杂的查询、使用视图或使用存储过程更可取?
SELECT IF(Task.repeat, repeats_expression, non_repeats_expression) as date_diff;