Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.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 如何设置一个SQL表,以便高效轻松地存储单个事件的多个日期和时间?_Php_Mysql_Sql_Database_Schema - Fatal编程技术网

Php 如何设置一个SQL表,以便高效轻松地存储单个事件的多个日期和时间?

Php 如何设置一个SQL表,以便高效轻松地存储单个事件的多个日期和时间?,php,mysql,sql,database,schema,Php,Mysql,Sql,Database,Schema,我有一个事件列表,希望在SQL数据库中存储事件的开始和结束时间。问题是,有些事件只在一天内发生,而其他事件则在多天内发生。有时,这些事件每天只发生一次,而其他事件则发生多次(更多说明,请参见下面的示例) 如何设置我的事件表以有效存储所有版本的开始和结束日期和时间? 需要存储在表中的示例数据: 作为补充说明,如果需要,我可以将日期和时间存储为Unix日期时间,但是如果需要,我更愿意单独存储值(以便以后更容易访问/隔离/使用) 编辑: 我忘了补充一点,我希望解决方案能够独立于一个表中。我不想使用S

我有一个事件列表,希望在SQL数据库中存储事件的开始和结束时间。问题是,有些事件只在一天内发生,而其他事件则在多天内发生。有时,这些事件每天只发生一次,而其他事件则发生多次(更多说明,请参见下面的示例)

如何设置我的
事件
表以有效存储所有版本的开始和结束日期和时间?

需要存储在表中的示例数据:
作为补充说明,如果需要,我可以将日期和时间存储为Unix日期时间,但是如果需要,我更愿意单独存储值(以便以后更容易访问/隔离/使用)

编辑: 我忘了补充一点,我希望解决方案能够独立于一个表中。我不想使用SQL
联接
外键
组合多个表(例如
事件
表和
事件时间
表)

编辑#2:
…我希望只有两列左右(不是
start\u datetime1
end\u datetime1
start\u datetime2
end\u datetime2
,等等)。

创建事件时间表?其中包含以下类似的内容(想法):


这样,您就可以拥有多个事件id,而且您可以拥有您描述的任何格式(跨多天、单日等)

创建一个事件时间表?其中包含以下类似的内容(想法):


这样,您就可以拥有多个事件id,而且您可以拥有您描述的任何格式(跨多天、单日等)

通常,您的选择是:

1) 同一行中的开始日期/时间(可能还有结束日期/时间)

。。。或者

2) 每个时隙的单独行(以及唯一的“事件id”)

根据你所说的,你可能想要选择2


3) 我想进一步冒险,也许“时间段”应该是它自己的、单独的表(外键为“事件id”)。

一般来说,您的选择是:

1) 同一行中的开始日期/时间(可能还有结束日期/时间)

。。。或者

2) 每个时隙的单独行(以及唯一的“事件id”)

根据你所说的,你可能想要选择2


3) 我想进一步冒险,也许“时间段”应该是它自己的、单独的表(外键是“事件id”)。

一个选项是为日期创建一个单独的表。然后,事件和日期之间就有了一对多的关系。日期表将引用事件的id。然后,您可以通过搜索事件的键来获取给定事件的所有日期

一个选项是为日期创建一个单独的表。然后,事件和日期之间就有了一对多的关系。日期表将引用事件的id。然后,您可以通过搜索事件的键来获取给定事件的所有日期

很好的解决方案,但我忘了添加一个小细节。。。我不想执行任何连接或使用外键。我希望这是完全独立的。根据您的要求,除非您不介意像start\u datetime1、end\u datetime1、start\u datetime2、end\u datetime2、start\u datetime3、end\u datetime3、start\u datetime4、end\u datetime4。。。我认为这不太可能。。。但对于数据库,我不是专家,所以您可以等待更好的解决方案:)令人沮丧,但这正是我所担心的。我曾想到过多个
start\u datetime
end\u datetime
字段,但希望能有更好的选择。谢谢你的帮助。你也可以将日期时间存储在一个php序列化字符串中,然后像那样保存到数据库中,每次需要时都取消序列化。。。但请注意,这根本不是一个推荐的做法,通常是不赞成的,因为如果一个“事件”有一个、两个或多个“开始/结束”时间,那么事件和日期之间绝对存在“一对多”关系。这意味着您肯定应该有一个单独的“事件时间段”表。很好的解决方案,但我忘了添加一个小细节。。。我不想执行任何连接或使用外键。我希望这是完全独立的。根据您的要求,除非您不介意像start\u datetime1、end\u datetime1、start\u datetime2、end\u datetime2、start\u datetime3、end\u datetime3、start\u datetime4、end\u datetime4。。。我认为这不太可能。。。但对于数据库,我不是专家,所以您可以等待更好的解决方案:)令人沮丧,但这正是我所担心的。我曾想到过多个
start\u datetime
end\u datetime
字段,但希望能有更好的选择。谢谢你的帮助。你也可以将日期时间存储在一个php序列化字符串中,然后像那样保存到数据库中,每次需要时都取消序列化。。。但请注意,这根本不是一个推荐的做法,通常是不赞成的,因为如果一个“事件”有一个、两个或多个“开始/结束”时间,那么事件和日期之间绝对存在“一对多”关系。这意味着您肯定应该有一个单独的“事件时间段”表。答案取决于你使用的数据库。您提到了“SQL数据库”,但其中有很多。MySQL、PostgreSQL、Oracle、Microsoft SQL Server等。例如,如果您使用的是PostgreSQL,则可以使用数组字段类型来存储所有以前值的历史记录。答案取决于您使用的数据库。您提到了“SQL数据库”,但其中有很多。MySQL、PostgreSQL、Oracle、Microsoft SQL Server等。例如,如果您使用的是PostgreSQL,则可以使用数组字段类型
Event Name                        |    # of Participants    | Times and Dates
==========================================================================================================
Three-legged-race                 |          14             |    08:00 - 09:30 on Mar 23
------------------------------------------------------------------------------------------------------
Pie/Hot Dog Eating Contests       |           9             |    12:00 - 14:00 and
                                  |                         |    15:30 - 17:30 on Mar 23
------------------------------------------------------------------------------------------------------
Decathlon                         |          37             |    10:00 - 14:00 on Mar 23
                                  |                         |    11:00 - 16:00 on Mar 24
------------------------------------------------------------------------------------------------------
Daily Opening/Closing Ceremonies  |         100             |    07:50 - 08:00 and 
                                  |                         |    17:30 - 17:40 on Mar 23
                                  |                         |    07:50 - 08:00 and
                                  |                         |    17:30 - 17:40 on Mar 24
EventTime (id, event_id, start_datetime, end_datetime)