Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/MySQL:为数据库中的重复事件建模,但查询日期范围_Php_Mysql_Database - Fatal编程技术网

PHP/MySQL:为数据库中的重复事件建模,但查询日期范围

PHP/MySQL:为数据库中的重复事件建模,但查询日期范围,php,mysql,database,Php,Mysql,Database,我正在开发一个简单的PHP/MySQL应用程序。作为其中的一部分,我希望能够对重复事件进行建模,但是我需要能够查询两个日期之间发生的所有事件(包括重复事件)。事件只有一个日期,一天中的时间无关紧要 我一直在研究这个问题,并研究了各种方法,包括和 然而,我在网上找到的任何支持这一点的数据库模式示例似乎都只支持查询某一天发生的事件。不支持在一系列日期之间发生的事件 作为一个抽象的例子 事件表(具有某种重复表示): 目标抽象查询结果选择2012年12月9日至2012年12月20日之间的事件 Event

我正在开发一个简单的PHP/MySQL应用程序。作为其中的一部分,我希望能够对重复事件进行建模,但是我需要能够查询两个日期之间发生的所有事件(包括重复事件)。事件只有一个日期,一天中的时间无关紧要

我一直在研究这个问题,并研究了各种方法,包括和

然而,我在网上找到的任何支持这一点的数据库模式示例似乎都只支持查询某一天发生的事件。不支持在一系列日期之间发生的事件

作为一个抽象的例子

事件表(具有某种重复表示):

目标抽象查询结果
选择2012年12月9日至2012年12月20日之间的事件

Event   |  Date        |   Repeats
-------------------------------------
Meeting | 10/Dec/2012  |   Every 7 days
Meeting | 17/Dec/2012  |   Every 7 days
Lunch   | 10/Dec/2012  |   Every 1 days
Lunch   | 11/Dec/2012  |   Every 1 days
Lunch   | 12/Dec/2012  |   Every 1 days
Lunch   | 13/Dec/2012  |   Every 1 days
etc...
Lunch   | 20/Dec/2012  |   Every 1 days
是否有支持此类查询的数据库模式?对于两天之间发生的任何事件(包括重复事件),我如何在该模式上进行查询


或者是用于重复事件的设计模式?

我不太理解您的目标。。。也许您在寻找SQL中的唯一函数

我将创建一个只包含一个名为
id
的列的计数表,并用0到500的数字填充该表。现在我们可以轻松地使用它来进行选择,而不是使用while循环

Id
-------------------------------------
0
1
2
etc...
然后我将事件存储在一个表中,
Name为varchar
startdate为datetime
重复为int

Name    | StartDate            |   Repeats
-------------------------------------
Meeting | 2012-12-10 00:00:00  |   7
Lunch   | 2012-12-10 00:00:00  |   1
现在,我们可以使用理货表选择两个日期之间的所有日期,方法是:

选择日期添加('2012-12-09 00:00:00',间隔Id日)作为显示日期
从`理货`

其中(DATE_ADD('2012-12-09 00:00:00',INTERVAL Id DAY))这非常困难,很可能会导致非常复杂的模式和/或查询。这不是更容易(也更高效)吗用PHP从简单的事件表查询中构造resultset?也许吧,但我担心随着时间的推移,结果集可能会充满过时的重复(或者在日期范围内没有出现的重复)可能我不仅误解了一些问题,而且我也无法预测我会得到多少选票。除非你确切知道答案,否则最好不要写任何东西,否则要求提供更多信息或建议会让你被否决:))这是正确的,您可以删除此答案以防止再次出现否决票
Name    | StartDate            |   Repeats
-------------------------------------
Meeting | 2012-12-10 00:00:00  |   7
Lunch   | 2012-12-10 00:00:00  |   1
ShowDate
-------------------------------------
2012-12-09 00:00:00
2012-12-10 00:00:00
2012-12-11 00:00:00
2012-12-12 00:00:00
2012-12-13 00:00:00
2012-12-14 00:00:00
2012-12-15 00:00:00
2012-12-16 00:00:00
2012-12-17 00:00:00
2012-12-18 00:00:00
2012-12-19 00:00:00
2012-12-20 00:00:00
Id  | Name       |StartDate             | Repeats   | ShowDate              | diff
---------------------------------------------------------------------------------
1   | Meeting    | 2012-12-10 00:00:00  | 7         | 2012-12-10 00:00:00   | 0
2   | Lunch      | 2012-12-10 00:00:00  | 1         | 2012-12-10 00:00:00   | 0
2   | Lunch      | 2012-12-10 00:00:00  | 1         | 2012-12-11 00:00:00   | -1
2   | Lunch      | 2012-12-10 00:00:00  | 1         | 2012-12-12 00:00:00   | -2
2   | Lunch      | 2012-12-10 00:00:00  | 1         | 2012-12-13 00:00:00   | -3
2   | Lunch      | 2012-12-10 00:00:00  | 1         | 2012-12-14 00:00:00   | -4
2   | Lunch      | 2012-12-10 00:00:00  | 1         | 2012-12-15 00:00:00   | -5
2   | Lunch      | 2012-12-10 00:00:00  | 1         | 2012-12-16 00:00:00   | -6
1   | Meeting    | 2012-12-10 00:00:00  | 7         | 2012-12-17 00:00:00   | -7
2   | Lunch      | 2012-12-10 00:00:00  | 1         | 2012-12-17 00:00:00   | -7
2   | Lunch      | 2012-12-10 00:00:00  | 1         | 2012-12-18 00:00:00   | -8
2   | Lunch      | 2012-12-10 00:00:00  | 1         | 2012-12-19 00:00:00   | -9
2   | Lunch      | 2012-12-10 00:00:00  | 1         | 2012-12-20 00:00:00   | -10