最近写一个项目,数据表插入数据的时候有一个特殊要求:
表结构属性如下:id startime endtime value;
插入数据的要求就是插入的时间段starttime-endtime不能在已有记录的starttime-endtime之间。
举个例子:加入已有的记录如下
1 3:00 5:00 10;2 6:00 8:00 20;3 10:00 14:00 15;4 16:00 10:00 20
那么插入的数据不能是4:00-5:00,因为4:00已经在3:00-5:00时间段中,也不能是2:00-9:00,因为包含了3:00-5:00和6:00-8:00的时间段。
开始觉得有点麻烦,不过仔细想想还是很好操作。
首先排除记录中所有endtime小于插入的st(新插入的starttime)的数据。用剩下的数据集来比较。
然后起始时间(st)大于starttime小于endtime的不得插入;
结束时间et(新插入的endtime)大于starttime小于endtime的不得插入;
起始时间(st)小于starttime,并且结束时间(et)大于endtime的不得插入;
最后在mybatis下的查询不可插入的记录的sql语句如下
<select id="getTimeToCompare" resultType="Time" parameterMap="paraMap">
<![CDATA[
select * from Time where id = #{id} and endtime > #{starttime} and
((starttime <= #{starttime} and endtime >= #{starttime}) or
(starttime <= #{endtime} and endtime >= #{endtime}) or
(starttime >= #{starttime} and endtime <= #{endtime}))
]]>
</select>
最后记录一个mysql小异常的处理。最近在linux下面装载了mysql后,如果用其他可视化工具远程连接的时候,居然报Errorcode:13的错误,看意思是临时目录没有权限。于是我就把linux下的tmp目录改成777权限,居然可以访问了。希望对遇到此问题的童鞋有点帮助!