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)