我需要有关Mysql问题的帮助。我有一个带有int间隔的表,如下所示:

|name | start | end  |
---------------------
| aaa | 1531  | 1540 |
| bbb | 1541  | 1550 |
| ccc | 1561  | 1580 |


如果用户说需要1531到1550之间的间隔,我应该返回true,因为它在表中可用。

使用此查询是不可能的:

SELECT * FROM table WHERE start <= 1531 AND end >= 1550


我希望查询返回的是空值。因此用户可以在我的应用中使用间隔。

谢谢你们!



编辑:
我需要这样的回报:

| aaa | 1531  | 1540 |
| bbb | 1541  | 1550 |


或间隔匹配的计数器。

另一个例子:

|name | start | end  |
----------------------
| aa  | 1     | 100  |
| bb  | 101   | 200  |
| vv  | 201   | 300  |
| dd  | 1501  | 1600 |
| ff  | 1601  | 1700 |
----------------------


我需要这个:

| XXX |    1  |  300 |
| YYY | 1501  | 1700 |


所以我可以用一个简单的搜索

或间隔计数器

最佳答案

如果我们假设行从不相交,则可以对重叠进行求和:

select (sum(1 + least(end, 1550) - greatest(start, 1531)) =
        (1 + 1550 - 1531)
       )
from t
where 1531 <= end and
      1550 >= start;

10-06 05:41