
Страница поста от канала Будни IT Инженера

05.10.2018 20:10
MySQL и БИТовое И
Как я строил связь много ко многим через «БИТовое И».
Задача: сделать отношение между категориями и продуктами БЕЗ промежуточной таблицы (такова специфика архитектуры). Один продукт может относиться к нескольким категориям, так же, как и несколько категорий могут включать много разных продуктов.
Решение: к таблице продуктов было добавлено поле bit_cat, к таблице категорий было добавлено поле bit_id. Для всех категорий было посчитано их bit_id, как степень двойки от пред идущего bit_id: 1,2,4,8,16,32 и т.д. Для продуктов же bit_cat считается как сумма bit_id всех категорий, в которые входит продукт. Далее как понять что продукт принадлежит или не принадлежит той или иной категории? Например «кефир» это «молочная продукция» ( bit_id = 2) и «напиток» ( bit_id = 8), значит bit_cat = 8+2=10. Предположим есть категория «хлеб» ( bit_id = 32), применим БИТовое И:
Кефир & молочная продукция – 10 & 2, результат > 0
Кефир & напиток – 10 & 8, результат > 0
Кефир & хлеб – 10 & 32, результат = 0
Таким образом можно понимать входит продукт в категорию или нет. Выберем все продукты из категории «напитки»:
* FROM podukts WHERE (bit_cat & 8) > 0;
Теперь Вам придётся как-то жить с этим знанием
#напамять #sql #mysql #database
Обращаем внимание, что мы не несем ответственности за содержимое(content) того или иного канала размещенный на нашем сайте так как не мы являемся авторами этой информации и на сайте она размещается в автоматическом режиме
Вы не ввели Email
Вы не ввели текст комментария