我有两列:start_time和end_time,如下所示:“00:00:05”,“00:00:10”(mysql时间)。
我的问题如下。如何验证一条记录是否与表中已有的任何其他记录重叠,以使其唯一,例如:
<00>“00:00:10”,“00:00:20”重叠“00:00:05”,“00:00:15”由于
答案 0 :(得分:1)
逻辑
在SQL中我会制定
SELECT count(*) FROM Tab as T WHERE
:param_start BETWEEN T.start_time AND T.end_time OR
:param_end BETWEEN T.start_time AND T.end_time OR
(:param_start <= T.start_time AND
:param_end >= T.end_time
)
如果计数是&lt;&gt; 0你有重叠
答案 1 :(得分:0)
进入数据库的任何记录本质上都是唯一的。如果您尝试验证唯一属性,例如“登录”,则必须添加'validates:login,:uniqueness =&gt;如果是'到模型的行,而且在迁移文件中,您将要添加以下行't.string:login,:unique =&gt; true'...这可以防止任何重叠
欢呼声
保
答案 2 :(得分:0)
select start_time, end_time
from tbl
where start_time < "00:00:20"
and "00:00:10" < end_time
limit 1;
注意:
Limit 1
用于快速返回结果,而无需查找/统计所有重叠答案 3 :(得分:0)
我写了一个宝石,可以帮助你解决这个问题。
https://github.com/robinbortlik/validates_overlap
自述文件是一个如何使用它的例子。但此时只适用于Rails 3。
欢呼声
RobinBortlík