MySQL « Вхождение элемента во множество
У объявления есть поле, в котором сказано в каких выпусках журналов оно должно выйти.
Пример: поле содержит значение "1,2-7,10,15-20". Т.е. сказано в каких номерах журналов оно выйдет, формат именно такой, есть диапазоны и единичные значения.
Всегда известен номер текущего выпуска журнала, допустим на данный момент это номер 6.
Как составить запрос, чтобы он, зная номер текущего журнала делал выборку исходя из значения поля со списком номеров?
Т.е. как проверить, входит ли 6 в диапазон "1,2-7,10,15-20"?
Всем спасибо.
1 ответов
Я думаю, что структура хранения данных изначально неверная.
Если эти диапазоны вводить в интерфейсе, то при добавлении лучше бы их дробить на индивидуальные записи для каждого номера и так заносить в таблицу.
Чтобы было удобнее, что при редактировании нужно снова собирать в "человеческие" диапазоны.
Тогда у вас получится хранить данные более структурированно, и проблема отпадет сама собой.
Например 1:
- Вводим 1,3-5, 7.
- Добавить (вносятся записи (5 строк) номеров 1,3,4,5,7 - в базе есть запись для каждого номера)
- Редактировать (получили номера 1,3,4,5,7 и собрали их снова в виде 1,3-5, 7)
Например 2:
- Вводим 1,3-5, 7.
- Добавить (вносится одна развернутая запись со значением поля из номеров 1,3,4,5,7 - возможен поиск по LIKE)
- Редактировать (получили поле 1,3,4,5,7 и собрали их снова в виде 1,3-5, 7)
В любом случае самым простым будет перенос части логики на ЯП.
Только руками. В смысле на прикладном языке. в mysql в строковых функциях нет разбивки строки по разделителю, а значит написание mysql функции выполняющей такой анализ превращается в академическое соревнование по мозголомству и алгоритмической крутизне. А в том же PHP такие вещи делаются на раз. Сначала explode по запятым, а потом проверка каждого элемента полученного массива. Если там число, то на соответствие, а если не число, то опять-таки разбивка на два значения и проверка на вхождение в диапазон.