@Absolute138

Как сделать «ИЛИ» в фильтрации по битовой маске?

Доброго времени, имею InstantCMS.
Фильтры - чекбоксы.
Пример:
- Мама - отмечен
- Папа
- Бабушка - отмечен
- Дедушка
- Внук - отмечен
Сохраняем,получаем в поле БД:
10101

Сейчас выбирается по условию LIKE.
Если, например, отметить Дедушку и Внука, то в запросе в БД будет сформирована такая маска:
LIKE '___11%' - и запрос не вернет ничего. Как сделать чтобы фильтрация заработала в логике "или"?
Т.е. "Внук" - истина, поэтому нужно вернуть результат. Через LIKE, похоже, что не реализовать такое. Как здесь поступить?
  • Вопрос задан
  • 149 просмотров
Решения вопроса 1
freeExec
@freeExec
Участник OpenStreetMap
Если вы представили свои чекбоксы, как биты, так и продолжайте с ними работать.
Ваше 10101 - это 21.
Дед и внук - это 3.
Сравниваем по маске 21 & 3 = 1. Это больше 0, значит нам подходит.
Проверяем на папке - это 8. 21 & 8 = 0. А это 0, значит мимо.

Другое дело, что с индексами возможно придётся повозиться.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Fragster
@Fragster
помогло? отметь решением!
Вот похожий пример:
sqlfiddle.com/#!9/bd5f72/9
единственный нюанс - в битовой маске может быть только 64 значения :)
А иначе нужна вспомогательная таблица, фильтровать по строке прям совсем не очень вариант.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы