我正在设置一个日历,用户可以在日历上指出何时可用。日历每天分为3个时段,每周7天(星期一上午,星期一下午,星期一晚上)。
我对将其存储在数据库中的最佳方法有些困惑。我已经考虑过要这样做:
开始日期
结束日期
user_id
或
时隙
user_id
或
user_id& mon1 mon2 mon3 ... sun3 创建21列似乎不是最佳选择,但这确实使可用性查询非常容易。
我想在定义时段的时间上保持一些灵活性。第二个似乎是给我的,因为之后我可以定义每天的小时数。
最后,我必须能够查找谁在2019-02-01 13:00:00-2019-02-01 17:15:00可以找到谁。这些日期将与时间段不对应。
答案 0 :(得分:0)
您可以使用3个字段来存储此信息,
slot_date - to store date of slot like 2018-12-17, 2018-12-18, etc
slot_time - to store time slot like 13:00:00, 15:00:00, etc
user_id - to store user identifier
假设您的2个具有这些字段的用户的示例数据看起来像这样,
slot_date slot_time user_id
---------------------------------
2018-12-17 14:00:00 1
2018-12-17 17:00:00 2
您可以轻松获得给定时间段内的用户可用性。例如,您想获取今天下午的时段(考虑下午1点至下午4点是傍晚时段),可以通过以下查询来检索
SELECT slot_date, slot_time, user_id
FROM tbl_slot
WHERE slot_date = '2018-12-17'
AND slot_time BETWEEN '13:00:00' AND '15:00:00'
类似地,您可以更改查询中的slot_time
子句以在早上和晚上的时段工作。
更新
根据OP的要求,如果用户选择日期和时间段,则该日期适用于每月/每年。基于此,您消除了slot_date
列,并使用day_of_week
来存储1到7的整数值,即(Sun到Sat)
day_of_week slot_time user_id
-----------------------------------
2 14:00:00 1
2 17:00:00 2
然后,将获取所有下午的可用时间的查询,
SELECT day_of_week, slot_time, user_id
FROM tbl_slot
WHERE day_of_week = '2'
AND slot_time BETWEEN '13:00:00' AND '15:00:00'