2012-12-24 29 views
1

我尝试创建一个iPhone应用程序,您可以在其中设置约会。一切都保存到MySQL数据库,我目前通过JSON获取数据到我的应用程序。这是一个工作流程创建约会和检测与iPhone的碰撞

  1. 用户1定义他工作的时间。例如。上午8点 - 下午4点。
  2. 用户2想要与用户1预约,例如, 8 am-9am。

当没有当前的预约时,可以保存。如果已经有一个,例如早上8.15 - 上午8时45分,会显示错误。

你能给我一个提示如何做到这一点?我正在考虑与NSDate“startDate”和“endDate”类,但我不知道如何检测到这些约会冲突。

非常感谢,每一个提示都表示赞赏。

+0

你想检查上午8点到上午9点之间是否有预约? –

回答

0

任命是有效的当且仅当满足以下条件:

  • 的任命是在用户的工作时间内;和

  • 它不会与现有约会,可在三种可能的方式发生冲突:

    • 新的任命在争食预约开始;和/或

    • 冲突约会在新约会期间结束;或

    • 冲突约会开始前和结束后的新约会。

您可以在纯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锁定读取,以防止并发事务中的的问题。

+0

谢谢你的回答。你为什么使用user_id来加入表格? User1应该能够与user2进行约会。我不知道它是否像这样工作。你能帮我吗? – doonot