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

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

15个回答

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

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

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

showbo
支付宝加好友偷能量挖 已经对比所有存在的记录了,判断记录有多少条是在范围内的,如果不存在count(id)就是0,存在就是大于0的数字,表示有几条。如100 结束900就是有2条,200~30,600~800这2条
大约 2 年之前 回复
showbo
支付宝加好友偷能量挖 回复qq_36375934: 楼主学下sql,给你的就是统计是否存在开始和结束在已经存在记录范围之内或者包含在输入访问内的所记录数量
大约 2 年之前 回复
qq_36375934
qq_charm 我数据库中有很多条这样的记录,要写循环吗?怎么写?
大约 2 年之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 正解。
大约 2 年之前 回复
showbo
支付宝加好友偷能量挖 回复qq_36375934: 大于范围再增加开始一个判断就行了 where (number1 between startnumber and endnumber )or (number2 between startnumber and endnumber ) or(number1<startnumber and number2>endnumber)
大约 2 年之前 回复
qq_36375934
qq_charm 这个不是比较一条记录啊,是要和数据库中的所有记录做比较。还有如果我将要插入的范围,比库中存在的范围都大也检查不了啊
大约 2 年之前 回复

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

zxf1234556
zxf1234556 回复qq_36375934: 没办法……只能都写出来,或者用动态语句拼接,把所有的数据都排列组合判断一遍
大约 2 年之前 回复
yuancht
yuancht 人反倒是对痘痘反反复复
大约 2 年之前 回复
qq_36375934
qq_charm 那我如果数据库中有上千条这样的范围怎么办?不是很麻烦吗?
大约 2 年之前 回复

首先判断最小值是否大于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代码实现的速度快。

打字不易。

qq_36375934
qq_charm 这个不是和一条记录比较啊,数据库中有很多条记录,这个要写个循环?
大约 2 年之前 回复
共15条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐