Мне нужна помощь с проблемой в 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;