我需要想出一个能够将员工的日程表存储在数据库中的软件。我目前有这样的设计:
CREATE TABLE IF NOT EXISTS `schedules` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`employee_id` varchar(32) NOT NULL,
`day_of_week` int(2) NOT NULL,
`starting_time` time DEFAULT NULL,
`ending_time` time DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
很直接。打印今天的日期,找出星期几,并从数据库中检索所有匹配项,但我想知道实现相同目标的更好方法。
我需要在日历上显示员工的日程安排,并且需要将日期传递给日历才能显示。但是,如果我知道的唯一信息是某个特定员工将在周三上班,我无法将日期传递给日历。
考虑到后一种数据库设计,有没有办法检索一个月/年的所有星期三或星期一?
谢谢!
编辑
我需要帮助(或更好的选择)将星期几更改为实际日期。
这些是我的“限制”:
- 我的日历控件需要一个日期才能在 UI 中显示“事件”。
- 员工应该只提交一次他们的日程安排。
例如:John Doe 每周一、周三和周五工作。8:00 - 12:00。
使用我当前的数据库设计,该信息以以下方式表示:
ID, employee_id, day_of_week, starting_time, ending_time
1, John Doe, 1, 8:00, 12:00
2, John Doe, 3, 8:00, 12:00
3, John Doe, 5, 8:00, 12:00
我需要能够将给定月份的日期传递给日历 UI。
例如,我应该能够想出一种方法来告诉我的日历控件:John Doe 将在 6 日、13 日、20 日和 27 日工作,考虑到我拥有的唯一信息是 "day_of_week" = 1 (星期一)
编辑 2
我目前但丑陋的解决方案是:遍历一个月中的所有日子,并逐日查询数据库。
编辑 3 - 解决方案
感谢RS,我能够解决我的问题。我保持schedules
表原样,但我创建了rs建议的表 在创建rs
共享的文章中描述的表之后
,以下查询完成了这项工作:
SELECT CONCAT(users.firstname,\" \",users.lastname) as employee_name,
DATE_FORMAT(DATE, '%a %b %d %Y') as date, schedules.starting_time,
schedules.ending_time FROM dates_d
RIGHT JOIN schedules ON schedules.day_of_week = dates_d.day_of_week
LEFT JOIN users ON schedules.employee_id = users.ID
我对一个数组进行了 JSON 编码,日历控件终于像魅力一样工作了。