我需要有关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;