2012-12-24 3 views
1

약속을 설정할 수있는 iPhone 용 응용 프로그램을 만들려고합니다. 모든 것이 MySQL 데이터베이스에 저장되며 현재 JSON을 통해 내 응용 프로그램에 데이터를 가져옵니다. 이것은 워크 플로입니다.약속 생성 및 감지 충돌

  1. User1은 작업 할 때를 정의합니다. 예 : 오전 8시 - 오후 4시.
  2. User2는 user1과 약속을 잡길 원합니다 (예 : 오전 8시 ~ 9시.

현재 약속이 없을 때 저장할 수 있습니다. 이미있는 경우 (예 : 8.15am - 8.45am, 오류가 표시됩니다.

이 작업을 수행하는 방법에 대한 힌트를 제공해 줄 수 있습니까? NSDate "startDate"및 "endDate"클래스에 대해 생각하고 있었지만 이러한 약속 충돌을 감지하는 방법을 잘 모르겠습니다.

감사합니다. 많은 힌트를 보내 주시면 감사하겠습니다.

+0

오전 8 시부 터 오전 9시 사이에 약속이 있는지 확인하고 싶습니까? –

답변

0

약속은 다음과 같은 조건이 충족되는 IFF에 유효합니다

  • 약속이 사용자의 작업 시간 내에; 및

  • 은 세 가지 방법으로 일어날 수있는 기존의 약속과 충돌하지 않습니다

    • 충돌하는 약속은 새 약속하는 동안 시작; 및/또는

    • 새로운 약속 중에 충돌 약속이 종료 됨; 또는

    • 충돌 약속은 새 약속 시작 전과 종료 후입니다.

다음과 같은 라인을 따라 뭔가 순수 SQL이 쿼리 수

: 사용이 SELECT을 수행 할 수

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 
) 

하는 것은 조심 잠금 읽기 동시성을 방지하기 위해 트랜잭션 내에서 문제.

+0

답장을 보내 주셔서 감사합니다. user_id를 사용하여 테이블을 조인하는 이유는 무엇입니까? User1은 user2와 약속을 잡을 수 있어야합니다. 이런 식으로 작동하는지 모르겠습니다. 도울 수 있니? – doonot