java向mysql插入数据是,进行范围判定

比如我mysql数据库中有这样的两条记录,都是整数类型:
开始200 结束300
开始600 结束800
现在我要插入一条数据怎么判断是否有包含的值在这两条数据中?
比如我插入一个范围 开始220 结束280,那就存在第一条记录中
比如我插入一个范围 开始150 结束350,那也包含了第一条记录
比如我插入一个范围 开始100 结束900,那都包含了。
这个应该怎么判断,就是我插入的范围不能在已有的范围中?

sql只需要判断插入的开始值或者结束值是否在已经存在的范围里面就行了,只有有一个处于范围内就不插入

 select count(id) from xxxtable where (number1 between startnumber and endnumber )or  (number2 between startnumber and endnumber )

执行上面的sql语句得到在范围内的记录数,为0再插入,否则不插入

首先判断最小值是否大于200小于300,或者大于600小于800,然后判断最大值是小于等于300,还是大于300小于600,还是大于600

首先判断最小值是否大于200小于300,或者大于600小于800,然后判断最大值是小于等于300,还是大于300小于600,还是大于600。那我如果数据库中有上千条这样的范围怎么办?不是很麻烦吗?那你把你的数据范围设为函数参数让计算机自己判断不就可以了吗,有什么麻烦的

这个判断插入的比如是200和谁最近就插入到哪个里面


and xx = #{ ,jdbcType=VARCHAR}

            and  xx=#{ ,jdbcType=VARCHAR}
        </if>
        <if test="xx  ">
            <if test=" ">
                and xx=#{ ,jdbcType=VARCHAR}
            </if>
            <if test=" xx  ">
                and  xx=#{ ,jdbcType=VARCHAR}
            </if>
        </if>
    </if>

fun(int a,int b){
循环查询数据库中记录的start和end;
if(a>end || b if(a>start && b<end){}
......
}

1、200-起始数据=a,
2、结束数据-300=b,
3、600-起始数据=c,
4、结束数据-800=d,
5、判断a、b、c、d和0的关系,

你这种类似全量查询的检查保存,就应该从设计上去处理问题了,优化你的表设计吧

如果这个问题不好解决,各位可不可以给我提供其它的方法,换表结构都可以。我主要是做IP范围检查,数据库中会存在很多的IP段。
我的想法是把字符串ip转换成long类型的数据,然后再做比较

一:如果理解是有交集就不行的话
sql 语句为:
select count(id) from xxxtable where (number1 < endnumber && number2 > startnumber )
大于0 ,就表示不满足条件。

二:如果理解是有包含关系就不行的话,
sql语句为:
select count(id) from xxxtable where ((number1 between startnumber and endnumber ) and (number2 between startnumber and endnumber )) or (number1endnumber)
大于0 ,就表示不满足条件。

where 条件分析 : (number1 between startnumber and endnumber ) and (number2 between startnumber and endnumber )
可以抽出 插入的数据被包含在记录中,如插入的数据 220-280 被包含在200-300这个记录中。

where条件分析: (number1endnumber)
可以抽出 插入的数据 包含记录中的数据,
如插入的数据150-300 包含 200-300 这条记录,插入的数据100-900 包含200-300,600-800记录。

都是不满足条件的。

所以上述要求已经达到。用sql语句实现的速度,肯定比用Java代码实现的速度快。

打字不易。

ip最大不就是255.255.255.255?能改表也就是能写存储过程了。切成4个字段排序找最小和最大的~ 很多的话全都读取出来切了排序内存抗的住么。

把开始的最小值minStartNum 和 结束的最大值maxEndNum用sql查询出来,然后与待插入的开始值startNum和结束值endNum比较,如果startNum大于maxEndNum或者endNum小于minStartNum,就可以插入,否则不能插入

select count(id) from xxxtable where (number1 between startnumber and endnumber )or (number2 between startnumber and endnumber )
执行上面的sql语句得到在范围内的记录数,为0再插入,否则不插入

如果是两条的话只需要在插入之前进行一个查询判断就可以了。但是如果有很多条数据,建议写mysql存储过程进行循环判断

只需要用SQL来进行判断前后两个值,然后在进行插入数据便可,也可以使用SQL的存储过程来进行实现。