Mysql 如果开始日期和结束日期优于开始日期和结束日期,则停止在选项卡中插入记录

Mysql 如果开始日期和结束日期优于开始日期和结束日期,则停止在选项卡中插入记录,mysql,database,Mysql,Database,我有一个表,其中任务分配给具有开始日期和结束日期的用户。我想做的是检查一个用户是否可以执行分配给他的任务,也就是说,检查他们在给定日期之间分配给他的任何任务。如果是,则限制用户添加记录 例如,如果分配给用户的任务开始日期为2015年6月23日结束日期为2015年8月23日。则当我添加日期介于上述开始日期和结束日期之间的新任务时,它应返回带有以下查询的记录。它对某些记录有效,但对于输入,如2015年6月23日开始日期和2015年6月23日结束日期,它不起作用 这是我的查询,如果找到记录,请检查可用

我有一个表,其中任务分配给具有开始日期和结束日期的用户。我想做的是检查一个用户是否可以执行分配给他的任务,也就是说,检查他们在给定日期之间分配给他的任何任务。如果是,则限制用户添加记录

例如,如果分配给用户的任务
开始日期为2015年6月23日
结束日期为2015年8月23日。
则当我添加日期介于上述开始日期和结束日期之间的新任务时,它应返回带有以下查询的记录。它对某些记录有效,但对于输入,如2015年6月23日开始日期和2015年6月23日结束日期,它不起作用

这是我的查询,如果找到记录,请检查可用性,然后返回该记录

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'

我认为您正在检查特定用户的可用性(由code
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';

我只是删除了您查询中的一些冗余。如果任务出现在
project
表中,且状态为0,taskType='task',并且与输入日期冲突,则它应该可以工作,这意味着它将返回记录(已分配给user-id-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';

我只是删除了您查询中的一些冗余。如果任务出现在
project
表中且状态为0,则它将返回记录(已分配给user-id-6的任务),taskType='task'与输入日期冲突。

有时我使用
=
是的,我也这样做了,但不起作用,但我认为BETWEEN是>=有时我使用
=
是的,我也这样做了,但不起作用,但我认为BETWEEN是>=如果我给任务s\u日期,它就不起作用2015-06-24 e_日期2015-07-31如果我们给他分配了日期为s_日期2015-06-25和e_日期2015-06-26的任务,那么它也会保存记录,但不应保存记录。因为他已经被分配了一项任务date@UsamaLucky:我理解您的逻辑,但在这种情况下,您还需要显示插入代码,在您的问题中,仅选择存在的任务部分。从分析可用性到插入任务,您需要完整地编写逻辑代码。如果我给任务s_日期2015-06-24 e_日期2015-07-31,那么它不起作用,如果我们给他分配s_日期2015-06-25和e_日期2015-06-26的任务,那么它也会保存记录,但不应该保存它。因为他已经被分配了一项任务date@UsamaLucky:我理解您的逻辑,但在这种情况下,您还需要显示插入代码,在您的问题中,仅选择存在的任务部分。从分析可用性到插入任务,您需要完整地编写逻辑代码。那就只有任何人能帮忙了。