従業員のスケジュールをデータベースに保存できるソフトウェアを考え出す必要があります。私は現在このデザインを持っています:
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 は、"day_of_week" = 1 (月曜日)
編集2
私の現在の醜い解決策は次のとおりです。月のすべての日をループし、データベースを毎日クエリします。
編集 3 - 解決策
RSのおかげで、問題を解決できました。テーブルはそのままにしましたが、 rsschedules
が提案したテーブルを作成しました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 エンコードしたところ、Calendar コントロールがついに魅力的に機能しました。