我有一个表格,其中任务分配给具有开始日期和结束日期的用户。我想做的是检查一个用户是否可以进行他被分配的任务。平均检查是他们在给定日期之间分配给他的任何任务。如果是,则限制用户添加记录。
例如,如果为用户分配了start_date is 23-06-2015
end_date is 23-08-2015.
的任务,那么当我添加日期介于start_date和end_date之间的新任务时,它应返回带有以下查询的记录。它适用于某些记录,但对于start_date 23-06-2015
和end_date 23-06-2015
这样的输入,它无效。
如果找到记录然后返回记录
,这是我的查询可用性查询SELECT t.*
FROM task t
INNER JOIN project p ON p.id = t.pid
INNER JOIN USER u ON u.uid = t.uid
INNER JOIN STATUS st ON st.id = t.id
WHERE t.uid = 6 AND (t.start_date BETWEEN '2015-06-23' AND '2015-08-23' OR t.end_date BETWEEN '2015-06-23' AND '2015-08-23') AND t.pid IN (
SELECT id
FROM project) AND st.status = 0 AND t.etype='task'
答案 0 :(得分:0)
我认为您正在检查特定用户的可用性(由代码t.uid=6
猜测),如果是,那么精炼查询应该是:
SELECT t.* FROM task t INNER JOIN project p ON p.id = t.pid
INNER JOIN STATUS st ON st.id = t.id WHERE t.uid = 6 AND st.status=0
AND (t.start_date BETWEEN '2015-06-23' AND '2015-08-23' OR
t.end_date BETWEEN '2015-06-23' AND '2015-08-23') AND t.etype='task';
我只是删除了查询中的一些冗余。并且它应该工作,意味着它将返回记录(已经分配的任务到user-id-6),如果project
表中的任务存在状态= 0,taskType ='任务'并与输入日期冲突。