我想在表格中插入新的价格范围,但在此之前我需要检查我的价格范围是否已包含或属于任何其他价格范围。
这是一个例子:
我的价格范围表:
| 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/