2013-12-13 4 views
0

Мне нужно сохранить оператор и их значение в базе данных, потому что после цикла в цикле мне нужно провести сравнение для вычисления цены.Лучший способ сохранить оператор и значение сравнения

Эти значения получены из HTML формы, который спрашивает несколько вопросов, а именно:

Вопрос: Сколько предметов?
Ответ: <(выберите варианты)10(TextBox)

Вопрос: Когда?
Ответ: =(выберите варианты)2013-12-13(TextBox)

Что такое лучший способ сохранить эти два значения в поле таблицы с несколькими вопросами?
Сериализовать с помощью PHP-оператора и значение?
Сохраните строку < 10 или = 2013-12-13?

Пожалуйста, дайте мне знать, если вы знаете лучшую технику.

Моя MySQL таблица

CREATE TABLE answers(
    id   INTEGER UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    answer_1  VARCHAR(50), 
    answer_2  VARCHAR(50), 
    answer_3  VARCHAR(50), 
    ... 
); 

UPDATE
я пропустил важную часть поста, у меня обновить вопрос: мой стол, как несколько ответов полей.

+6

два поля. 'operator' и' value'. не пытайтесь разбить их в одно поле. –

+0

Извините, ребята, я пропустил важную часть сообщения (теперь обновлено), мою таблицу как несколько полей ответов, и я не могу добавить поле оператора и значение для каждого ответа. Надеюсь, я очистил свой вопрос. –

+0

Способ хранения данных важен не только при добавлении его в вашу БД, но и в том, когда и как вы его используете. Также очень важно, какие данные вы будете добавлять к нему. Моя реакция кишки заключается в том, чтобы предложить хранить их в виде разделенной запятой строки, чтобы вы могли использовать «взрыва» и «implode» PHP для обработки данных ... но это не сработает, если какое-либо из значений может иметь запятую в них , Если нет, вам необходимо дезинфицировать данные, чтобы убедиться, что это не так. – Toote

ответ

0

Это похоже на то, что дизайн базы данных mysql идет вразрез с хорошими принципами проектирования СУБД.

Если у вас есть вопросы в форме, вы не ставите ответы на ВСЕ вопросы в общее поле ответа.

Вы определенно хотите хранить оператор «меньше или равно/etc» в дискретном поле, но вы также хотите хранить даты в поле даты. и количества элементов в соответствующем целочисленном/числовом значении.

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

CREATE TABLE answers(
    id   INTEGER UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    modItems VARCHAR(4), // the greaterthan/lessthan for numItems 
    numItems INTEGER, 
    modDate  VARCHAR(4), // the greaterthan/lessthan for dateDelivery, 
    dateDelivery DATETIME ); 

Также, глядя на ваш прецедент, вы можете изменить структуру веб-формы, которая генерирует данные. Является ли пользователь действительно сказать, что они хотят «менее 10 предметов»? Я предполагаю, что они собираются узнать (или оценить), сколько предметов они хотят. Если вы собираетесь в конечном итоге предоставить им специальную обработку/сделки/и т. Д., Основанные на количестве элементов, просто позвольте им выбрать диапазон элементов, который вы в конечном итоге используете, т. Е. Список опций, заполненный 1-9 элементами/10- 50 предметов/51-100 предметов и т. Д.

+0

Вы правы в хорошем дизайне СУБД, ваш ответ - хороший способ, но форма не такая гибкая - разные поля, тип данных - и я просто пытаюсь найти лучший компромисс для хранения данных так же хорошо, как возможное. Спасибо за вашу помощь. –

0

Держите их отдельно - ваша таблица будет выглядеть/работать лучше, если бы это было больше похоже на это:

CREATE TABLE answers(
    `id`   INTEGER UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    `answer_id` INTEGER, 
    `operator` TEXT, 
    `value`  TEXT, 
    UNIQUE KEY `answer` (`id`,`answer_id`) 
); 

(Используйте NOT NULL/правильные типы столбцов в зависимости от обстоятельств вашей ситуации, конечно)

answer_id должен быть определен программно, прежде чем вставлять данные, но вы делаете это уже для имен столбцов answer_1/etc.

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