Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测iPhone日历约会冲突的SQL语句_Iphone_Mysql_Ios_Sql_Plsql - Fatal编程技术网

检测iPhone日历约会冲突的SQL语句

检测iPhone日历约会冲突的SQL语句,iphone,mysql,ios,sql,plsql,Iphone,Mysql,Ios,Sql,Plsql,我尝试为iPhone创建一个可以设置约会的应用程序。所有内容都保存在MySQL数据库中,目前我通过JSON将数据输入我的应用程序。这是一个工作流: User1定义他工作的时间。例如上午8点到下午4点。 用户2希望与用户1预约,例如上午8点到9点。 脚本应该能够执行以下操作: 预约在用户的工作时间内;和 它不会与现有的约会冲突,这可能以三种方式发生: 冲突约会在新约会期间开始;和/或 冲突约会在新约会期间结束;或 冲突约会在新约会之前开始,在新约会之后结束。 以下是重要的表格: select子句的

我尝试为iPhone创建一个可以设置约会的应用程序。所有内容都保存在MySQL数据库中,目前我通过JSON将数据输入我的应用程序。这是一个工作流:

User1定义他工作的时间。例如上午8点到下午4点。 用户2希望与用户1预约,例如上午8点到9点。 脚本应该能够执行以下操作:

预约在用户的工作时间内;和 它不会与现有的约会冲突,这可能以三种方式发生: 冲突约会在新约会期间开始;和/或 冲突约会在新约会期间结束;或 冲突约会在新约会之前开始,在新约会之后结束。 以下是重要的表格:

select子句的输入是两个时间戳,开始和结束。这些由用户定义。因此,脚本应该检查用户2是否在该特定时间工作,以及是否已经有约会

我目前有类似的功能,但它使用用户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
)

感谢您的帮助。Thx.

您需要让应用程序读取数据并确定时间是否可用,或者需要创建一个包含可用时间段的视图,例如每30分钟一次

我会这样做:

CREATE TABLE #timeslot
(
timeslot_id INT PRIMARY KEY IDENTITY(1,1),
timeslot_time DATETIME NOT NULL
)

DECLARE @startime DATETIME, @endtime DATETIME
SELECT @starttime = '12/25/2012 08:00:00.000', @endtime = '12/25/2012 15:00:00.000'

WHILE @starttime < @endtime BEGIN
   INSERT INTO #timeslot (timeslot_time)
    VALUES (@starttime)
    SET @starttime = DATEADD(mm,30,@starttime)
END

SELECT
   w.workerid,
   ts.timeslot_time
INTO
   ios_workertimeslot
FROM
   #timeslot ts
FULL OUTER JOIN
   ios_worker w
   ON  (1 = 1)


SELECT
   wts.workerid,
   wts.timeslot_time,
   ap.appointmentid,
   CASE WHEN ap.appointmentid IS NOT NULL THEN 0 ELSE 1 END AS AvailableSlot
FROM
   ios_workertimeslot wts
JOIN
   ios_workinghours wh
   ON  (wts.workerid = wh.workerid)
   AND (wts.timeslot_time >= wh.start)
   AND (wts.timeslot_time < wh.end)
LEFT JOIN
   ios_appointment ap
   ON  (wts.workerid = ap.workerid)
   AND (wts.timeslot_time >= ap.start)
   AND (wts.timeslot_time < ap.end)
这将为您留下一个指示可用和不可用时隙的数据集


希望这有帮助

您需要让应用程序读取数据并确定时间是否可用,或者需要创建一个包含可用时间段的视图,例如每30分钟一次

我会这样做:

CREATE TABLE #timeslot
(
timeslot_id INT PRIMARY KEY IDENTITY(1,1),
timeslot_time DATETIME NOT NULL
)

DECLARE @startime DATETIME, @endtime DATETIME
SELECT @starttime = '12/25/2012 08:00:00.000', @endtime = '12/25/2012 15:00:00.000'

WHILE @starttime < @endtime BEGIN
   INSERT INTO #timeslot (timeslot_time)
    VALUES (@starttime)
    SET @starttime = DATEADD(mm,30,@starttime)
END

SELECT
   w.workerid,
   ts.timeslot_time
INTO
   ios_workertimeslot
FROM
   #timeslot ts
FULL OUTER JOIN
   ios_worker w
   ON  (1 = 1)


SELECT
   wts.workerid,
   wts.timeslot_time,
   ap.appointmentid,
   CASE WHEN ap.appointmentid IS NOT NULL THEN 0 ELSE 1 END AS AvailableSlot
FROM
   ios_workertimeslot wts
JOIN
   ios_workinghours wh
   ON  (wts.workerid = wh.workerid)
   AND (wts.timeslot_time >= wh.start)
   AND (wts.timeslot_time < wh.end)
LEFT JOIN
   ios_appointment ap
   ON  (wts.workerid = ap.workerid)
   AND (wts.timeslot_time >= ap.start)
   AND (wts.timeslot_time < ap.end)
这将为您留下一个指示可用和不可用时隙的数据集


希望这有帮助

为什么要在SQL中执行此操作?你不能把数据库读入一些数据结构,然后根据需要操作它吗?为什么你想用SQL来做呢?你不能把数据库读入一些数据结构,然后根据需要操作它吗?