Рассматривали ли вы использование битовой маски ?Ниже приведено объяснение с использованием выбранных категорий в качестве примера (не уверен, что категории будут работать в вашей ситуации, но оно иллюстрирует концепцию):
Начните с присвоения одной двоичной цифры каждому значению -
cat1 cat2 cat3 cat4
---- ---- ---- ----
1 2 4 8
Далее вы добавите целочисленный столбец в основную таблицу, мы назовем его options.Когда число преобразуется в двоичное, каждая цифра будет отображать, установлены ли категории 1, 2, 3 или 4.Пример:
5 = 0101 в двоичном формате = cat1 установлен, cat2 не установлен, cat3 установлен, cat4 не установлен
id | name | options
---------------------------
1 | name1 | 5
2 | name2 | 2
3 | name3 | 7
4 | name4 | 6
Теперь мы можем использовать побитовые операции со столбцом параметровопределить, какие варианты разрешены.Примеры:
Чтобы получить все записи, для которых установлена категория 2, когда мы не заботимся о других категориях, выполните следующую операцию:
2 & options = 2
Это вернет записи 2,3 и 4.
Чтобы получить все записи, для которых установлены cat2 и cat3, мы выполним следующую побитовую операцию:
6 & options = 6
Это вернет записи 3 и 4
Чтобы получить все записи, для которых установлены категории 1 и 3, мы выполним следующую побитовую операцию:
5 & options = 5
При этом будут возвращены записи 1 и 3.
Установлена ТОЛЬКО категория 3:
4 |Опции = 4
Категория 3 НЕ установлена:
4 & опции = 0
Вероятно, это сложная концепция для понимания, поэтому, пожалуйста, дайте мне знатьесли у вас есть какие-нибудь вопросы.Мне кажется, что это может быть самый простой способ выполнить то, что вы пытаетесь сделать, как только вы сможете понять концепцию.