Mysql (+php) 存储、检索和显示日期范围的正确方法
Mysql (+php) Right approach to store, retrieve and show date ranges
我正在开发一个日历应用程序,您可以在其中设置可以持续多天的事件。在给定日期可以有多个事件,已经开始或从那天开始。用户将以日历形式查看所有内容。
现在,我的问题是:以下哪项是正确的方法?还有更好的方法吗?
1) 使用 2 个 table 事件和 events_days 并将每个事件的日期存储在 event_days table
2) 仅使用一个 table 与存储在 date_from 字段和 date_to 字段中的事件,每次生成mysql 和 php 包含事件的所需范围的天数列表
显然,第一个选项需要更多的数据库存储空间,而第二个选项需要服务器进行更大的工作来生成列表(每次用户请求时)。
数据库存储目前应该不是问题,但我不知道将来是否会一样。我担心第二个选项需要太多资源。
两种方法我都用过。以下是我注意到的优点和缺点列表:
两个 table:events(id)
和 events_dates(eventid, date)
优点:
- 检查给定日期或给定日期之间是否有事件的查询很简单:
SELECT eventid FROM events_dates WHERE date BETWEEN '2015-01-01' AND '2015-01-10'
- 查询 select 事件的日期列表很简单
SELECT date FROM events_dates WHERE eventid = 1
缺点:
- 虽然 select 日期列表很简单,但插入事件的日期列表需要编写脚本(或 table-of-dates)
- 确保数据保持一致所需的其他措施,例如,当插入跨越三天的事件时,您需要四次插入查询
- 此结构不适用于table涉及时间的情况,例如会议日程
一个 table: events(id, start, end)
缺点:
优点:
- 插入事件很简单
- 这种结构在涉及时间的情况下table
我正在开发一个日历应用程序,您可以在其中设置可以持续多天的事件。在给定日期可以有多个事件,已经开始或从那天开始。用户将以日历形式查看所有内容。
现在,我的问题是:以下哪项是正确的方法?还有更好的方法吗?
1) 使用 2 个 table 事件和 events_days 并将每个事件的日期存储在 event_days table
2) 仅使用一个 table 与存储在 date_from 字段和 date_to 字段中的事件,每次生成mysql 和 php 包含事件的所需范围的天数列表
显然,第一个选项需要更多的数据库存储空间,而第二个选项需要服务器进行更大的工作来生成列表(每次用户请求时)。
数据库存储目前应该不是问题,但我不知道将来是否会一样。我担心第二个选项需要太多资源。
两种方法我都用过。以下是我注意到的优点和缺点列表:
两个 table:events(id)
和 events_dates(eventid, date)
优点:
- 检查给定日期或给定日期之间是否有事件的查询很简单:
SELECT eventid FROM events_dates WHERE date BETWEEN '2015-01-01' AND '2015-01-10'
- 查询 select 事件的日期列表很简单
SELECT date FROM events_dates WHERE eventid = 1
缺点:
- 虽然 select 日期列表很简单,但插入事件的日期列表需要编写脚本(或 table-of-dates)
- 确保数据保持一致所需的其他措施,例如,当插入跨越三天的事件时,您需要四次插入查询
- 此结构不适用于table涉及时间的情况,例如会议日程
一个 table: events(id, start, end)
缺点:
优点:
- 插入事件很简单
- 这种结构在涉及时间的情况下table