予定を立てられるiPhone用のアプリを作ってみました。すべてがMySQLデータベースに保存され、現在、JSONを介してデータをアプリに取得しています。これはワークフローです:
- User1は、いつ作業するかを定義します。例:午前8時から午後4時。
- User2は、user1との約束を持ちたいと考えています(例:午前8時から午前9時)。
スクリプトはこれを実行できる必要があります。
- 予定はユーザーの勤務時間内です。と
- 既存の予定と衝突することはありません。これは、次の3つの方法で発生する可能性があります。
- 衝突する予定は、新しい予定の間に始まります。および/または
- 衝突する予定は、新しい予定の間に終了します。また
- 衝突する予定は、新しい予定の前に開始し、後に終了します。
これらは重要なテーブルです:
// new row should be added here when the conditions above are met
create table ios_appointment (
appointmentid int not null auto_increment,
start timestamp,
end timestamp,
user_id_fk int
)
// a working hour has a n:1 relationshipt to ios_worker
create table ios_workinghours (
workinghoursid int not null auto_increment,
start timestamp,
end timestamp,
worker_id_fk int
)
// employee, has a 1:n relationship to ios_workinghours
create table ios_worker (
workerid int not null auto_increment,
prename varchar(255),
lastname varchar(255),
...
)
select句の入力は、2つのタイムスタンプstart
とend
です。これらはユーザーが定義します。したがって、スクリプトは、ユーザー2がその特定の時間に作業しているかどうか、およびすでに予定があるかどうかを確認する必要があります。
私は現在このようなものを持っていますが、それはuser_idを使用してテーブルをリンクします:
SELECT EXISTS (
SELECT *
FROM ios_appointments a JOIN ios_workhours h USING (user_id)
WHERE user_id = 1
AND h.start <= '08:00:00' AND h.end >= '09:00:00'
AND (
a.start BETWEEN '08:00:00' AND '09:00:00'
OR a.end BETWEEN '08:00:00' AND '09:00:00'
OR (a.start < '08:00:00' AND a.end > '09:00:00')
)
LIMIT 1
)
すべての助けに感謝します。どうも。