2010-10-29 3 views
2

У меня есть форма для заполнения, которая имеет несколько входных полей и 20 флажок. Мой вопрос заключается в том, как организовать записи выбранного флажка в mysql и каков наилучший способ их поиска с помощью php. Можете ли вы привести мне пример?Хранить данные в MySQL

+0

Подробнее, пожалуйста. Как часто выбираются эти флажки? Для чего они нужны? Связаны ли они с другими полями ввода? Сколько записей будет храниться в вашей таблице? – joni

+0

Не могли бы вы дать более подробную информацию? Являются ли эти флажки динамическими? То есть сама форма выходит из базы данных? – Nigel

+0

Может ли _you_ указать _us_ пример кода, который вы пытаетесь сделать? – lbedogni

ответ

0

Вы можете использовать одно поле BIGINT, позволяя каждому биту представлять собой одну из характеристик свойства.

Допустим, вы определяете свойства следующим образом

1 = furnished (000001b) 
2 = with garage (000010b) 
4 = new construction (000100b) 
8 = ... (001000b) 
16 = ..... (010000b) 

Таким образом, если первый бит поле является 1, что означает, что имущество обставлена, если третий бит равен 1, то это новое строительство, и так на.

Вы можете использовать операторы побитового для проверки каждой характеристики, т.е.

SELECT * FROM property WHERE characterization & 2 

возвратит свойства с гаражом. Точно так же

SELECT * FROM property WHERE characterization & 5 

будет возвращать свойства, новые конструкции и также оборудованы (эх .. ну, вы поняли идею :-)).

Имейте в виду, что BIGINT имеет 64 бита, поэтому вы не можете иметь более 64 различных характеристик в одном и том же поле.

+0

Это нарушает 1-й NF - что вы никогда не должны делать без веской причины. – symcbean

+0

Правда. Я согласен, что это решение может быть менее идеальным для этой конкретной проблемы. – Frode

-1

Если они не в разных группах, но есть много вариантов, вы можете сохранить их в такой строке: option1: yes | option2: no | .... и вы можете легко запросить различные параметры, такие как опция WHERE LIKE ' % | option1: yes |% ', или что-то в этом роде.

+0

Можете ли вы привести несколько примеров поиска? – Peter

+0

Что вы хотите найти? Как я уже сказал, если вы ищете определенную опцию, просто добавьте опцию WHERE LIKE '% | option1: yes |%' к вашему запросу, где опция - столбец таблицы, а параметр 1 - тот, который вы ищете. –

+0

очень неэффективный способ. получение значений с помощью LIKE «% ...%» очень медленное, и такого сценария следует избегать и использовать только в особых случаях. – Markus

3

MySQL - это реляционная база данных, поэтому зачем хранить все эти строки?

А что-то вроде этого:

Пусть ваши флажков расположены горизонтально. Поэтому достаточно интуитивно относиться к ним в базе данных. Скажем, ваши формы похожи на:

  1. Какую пищу вам больше всего нравится?

    O Pizza O Паста O Суши O Салат

Предположим, кто-то любит все, кроме Sushi.Someone еще может только как суши

Так что ваша таблица результатов в базе данных может выглядеть следующим образом:

id(PK) user  question  col  answer 
1  someone  1    1   1 
2  someone  1    2   1 
3  someone  1    3   0 
4  someone  1    4   1 
5  someoneelse 1    3   1 

Где ответ - это некоторый флаг, который равен 1, если флажок установлен, и равен 0, если нет.

Я просто догадываюсь, что вы имеете в виду, как и все, поэтому, может быть, я смогу дать лучший ответ, если вы попробуете немного точнее.

+1

+1: жизнеспособный, эффективный и расширяемый подход – symcbean

Смежные вопросы