mysql - 如何使用 MySQL 检查某个价格范围是否包含在任何价格范围中?

标签 mysql sql range

我想在表格中插入新的价格范围,但在此之前我需要检查我的价格范围是否已包含或属于任何其他价格范围。

这是一个例子:

我的价格范围表:

| minimum | maximum |
---------------------
|       1 |     100 |
|     201 |     300 |
|     301 |     400 |
  • 如果我提交 [50,200],我必须拒绝它,因为 50 包含在 [1,100] 范围内。
  • 如果我提交 [175,201],我必须拒绝它,因为 201 包含在 [201,300] 范围内。
  • 如果我提交 [350,380],我必须拒绝它,因为 350 和 380 包含在 [301,400] 范围内。
  • 如果我提交 [120,190],我必须接受,因为 120 和 190 不包含在任何范围内。

我的问题是如何使用 MySQL 检查提交的范围是否包含在我的表中。

最佳答案

这应该可行(假设该表名为ranges并且新的范围参数分别为@low和@high):

IF(NOT EXISTS (SELECT *
                 FROM ranges
                WHERE @low BETWEEN minimum AND maximum)
   AND 
   NOT EXISTS (SELECT *
                 FROM ranges
                WHERE @high BETWEEN minimum AND maximum))
BEGIN
     INSERT INTO ranges
         (minumum, maximum)
       VALUES
         (@low, @high)
END

当然,这可以进一步合并/压缩:

IF(NOT EXISTS (SELECT *
                 FROM ranges
                WHERE @low BETWEEN minimum AND maximum
                   OR @high BETWEEN minimum AND maximum))
BEGIN
     INSERT INTO ranges
         (minumum, maximum)
       VALUES
         (@low, @high)
END

更进一步:

INSERT INTO ranges
   (minimum, maximum)
SELECT T.minimum, T.maximum
  FROM (SELECT @low as minimum, @high as maximum) T
 WHERE NOT EXISTS (SELECT *
                     FROM ranges
                    WHERE @low BETWEEN minimum AND maximum
                       OR @high BETWEEN minimum AND maximum)

关于mysql - 如何使用 MySQL 检查某个价格范围是否包含在任何价格范围中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9280706/

相关文章:

php - 我试图在表格中显示我的数据库中的数据,但不想出现,我不知道出了什么问题

javascript contentEditable - 包装交叉标签选择

javascript - 如何获取window.getSelection()的范围对象?

mysql - 选择包含特定数量的给定字符的项目 (SQL)

mysql - Zend Select and NOT IN 数组

php - laravel 无法打开输入文件 : artisan (5. 3)

ruby - 内联数组切片

php - 显示带有子类别内容的类别内容

sql - 创建多行 "table"作为 SELECT 的一部分

php - 选择查询更新缓慢