检测iPhone日历约会冲突的SQL语句
我尝试为iPhone创建一个可以设置约会的应用程序。所有内容都保存在MySQL数据库中,目前我通过JSON将数据输入我的应用程序。这是一个工作流: User1定义他工作的时间。例如上午8点到下午4点。 用户2希望与用户1预约,例如上午8点到9点。 脚本应该能够执行以下操作: 预约在用户的工作时间内;和 它不会与现有的约会冲突,这可能以三种方式发生: 冲突约会在新约会期间开始;和/或 冲突约会在新约会期间结束;或 冲突约会在新约会之前开始,在新约会之后结束。 以下是重要的表格: select子句的输入是两个时间戳,开始和结束。这些由用户定义。因此,脚本应该检查用户2是否在该特定时间工作,以及是否已经有约会 我目前有类似的功能,但它使用用户id链接表:检测iPhone日历约会冲突的SQL语句,iphone,mysql,ios,sql,plsql,Iphone,Mysql,Ios,Sql,Plsql,我尝试为iPhone创建一个可以设置约会的应用程序。所有内容都保存在MySQL数据库中,目前我通过JSON将数据输入我的应用程序。这是一个工作流: User1定义他工作的时间。例如上午8点到下午4点。 用户2希望与用户1预约,例如上午8点到9点。 脚本应该能够执行以下操作: 预约在用户的工作时间内;和 它不会与现有的约会冲突,这可能以三种方式发生: 冲突约会在新约会期间开始;和/或 冲突约会在新约会期间结束;或 冲突约会在新约会之前开始,在新约会之后结束。 以下是重要的表格: select子句的
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来做呢?你不能把数据库读入一些数据结构,然后根据需要操作它吗?