Альтернатива побитовой операции - PullRequest
2 голосов
/ 05 июля 2011

Сценарий: я имею в виду 4 флажка, и пользователи могут выбрать эти флажки в любой комбинации (они также имеют право не устанавливать даже один флажок).Я должен хранить эти 4 варианта в одном столбце.Я думаю, что лучший вариант - хранить с использованием двоичного представления

option1 has the constant value 1 
option2 has the constant value 2
option3 has the constant value 4
option4 has the constant value 8

Так что, если клиент выбирает option2 и option4, то значение, которое хранится в БД, будет 2 + 8, то есть: 10, если клиент выбираетoption1, option4 и option8 значение будет 1 + 4 + 8, что равно 13.

Также, когда я запрашиваю из mysql, я могу использовать

Select * from option_table where (option & 4)=4;

, если я хочу получить строки, где option3выбран.

Но по какой-то причине я не могу использовать этот подход или просто сказать, что мне нужно знать, какой следующий лучший вариант для хранения этих нескольких значений в одном столбце?

Ответы [ 2 ]

7 голосов
/ 05 июля 2011

Альтернативой может быть умножение простых чисел. Чтобы выбрать, вы должны выбрать столбцы, где модуль простого числа в значение столбца равно 0.

Пример:

Значение 1: 2
Значение 2: 3
Значение 3: 5
Значение 4: 7

Значения 2 и 3 будут 3 * 5 = 15
Значения 1, 2, 3, 4 будут 2 * 3 * 5 * 7 = 210

Чтобы получить строки с включенным значением 1, выберите где value % 2 == 0

1 голос
/ 05 июля 2011

Вы всегда можете использовать этот подход, если число битов меньше, чем длина типа этого столбца в битах. Если нужно сохранить больше битов, вы можете использовать несколько столбцов (полей).

Вы также можете использовать Битовые поля .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...