MySQL-запрос между двумя диапазонами

Мне нужна помощь с запросом. Я беру ввод от пользователя, где они вводят диапазон от 1 до 100. Так что это может быть как 30-40 или 66-99. Затем мне нужен запрос для извлечения данных из таблицы, в которой есть high_range и low_range, чтобы найти совпадение с любым числом в их диапазоне.

Таким образом, если пользователь сделал 30-40, а в таблице были записи для 1-80, 21-33, 32-40, 40-41, 66-99 и 1-29, он нашел бы все, кроме двух последних, в таблице.

Что проще всего сделать?

Спасибо

3 ответа

Решение

Если я правильно понял (т.е. вы хотите любой диапазон, который перекрывает введенный пользователем), я бы сказал:

SELECT * FROM table WHERE low <= $high AND high >= $low

Я понял, что диапазон хранится в этом формате. low-high, Если это так, то это плохой дизайн. Я предлагаю разбить значения на две колонки: low, а также high,

Если у вас уже есть разбитые значения, вы можете использовать какое-то утверждение вроде:

SELECT * FROM myTable WHERE low <= $needleHigherBound AND high >= $needleLowerBound

Если у вас есть значения, хранящиеся в одном столбце, и настаиваете, что они остаются, вы можете найти SUBSTRING_INDEX Функция MySQL полезна. Но в этом случае вам придется написать сложный запрос, чтобы проанализировать все значения всех строк, а затем сравнить их с вашими поисковыми значениями. Кажется, что нужно приложить немало усилий, чтобы скрыть недостатки дизайна.

SELECT * FROM table WHERE ($low BETWEEN low_range AND high_range) OR ($high BETWEEN low_range AND high_range)

Другие вопросы по тегам