1

予定を立てられるiPhone用のアプリを作ってみました。すべてがMySQLデータベースに保存され、現在、JSONを介してデータをアプリに取得しています。これはワークフローです

  1. User1は、いつ作業するかを定義します。例:午前8時から午後4時。
  2. User2は、user1との約束を持ちたいと考えています(例:午前8時から午前9時)。

現在の予定がない場合は保存できます。すでに存在する場合、たとえば8.15am〜8.45amの場合、エラーが表示されます。

これを行う方法のヒントを教えてください。NSDateが「startDate」と「endDate」のクラスについて考えていましたが、これらの予定の衝突を検出する方法がわかりません。

どうもありがとう、すべてのヒントをいただければ幸いです。

4

1 に答える 1

0

次の条件が満たされている場合、予約は有効です。

  • 予定はユーザーの勤務時間内です。と

  • 既存の予定と衝突することはありません。これは、次の3つの方法で発生する可能性があります。

    • 衝突する予定は、新しい予定の間に始まります。および/または

    • 衝突する予定は、新しい予定の間に終了します。また

    • 衝突する予定は、新しい予定の前に開始し、後に終了します。

次の行に沿って何かを使用して、純粋なSQLでこれをクエリできます。

SELECT EXISTS (
  SELECT *
  FROM   appointments a JOIN 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
)

SELECT同時実行の問題を防ぐために、トランザクション内でロッキングリードを使用してこれを実行するように注意してください。

于 2012-12-24T10:09:50.277 に答える