2013-12-13 53 views
0

我需要將運算符及其值存儲到數據庫中,因爲在循環之後,我必須對價格calc進行比較。更好的方法來存儲運算符和比較值

這些值來自一個HTML表單,詢問幾個問題,即:

問:多少個項目?
答:<(選擇選項)10(文本)

問:什麼時候?
答:=(選擇選項)2013-12-13(文本)

什麼是這兩個值存儲與多個問題表字段的最佳方式?
使用PHP運算符和值序列化?
存儲字符串< 10= 2013-12-13

請讓我知道,如果你知道更好的tecnique。

我的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

您存儲數據的方式不僅在您將其添加到數據庫時很重要,而且在您何時以及如何使用它時也很重要。你將添加到什麼樣的數據中也是非常重要的。我的直覺反應是建議將它們存儲爲一個逗號分隔的字符串,以便您可以使用PHP的explode和implode來處理數據......但如果其中任何一個值都可以有逗號。如果沒有,您需要清理數據以確保不太好。 – Toote

回答

0

這聽起來像是MySQL數據庫的設計違背了良好的DBMS設計原則。

如果您在表單中已知問題,則不會將所有問題的答案放入通用答案字段。

您一定要將「小於/等於/ 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 ); 

另外,看看您的用例,您可能想要更改生成數據的Web表單的結構。用戶真的會說他們想要「少於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必須在插入數據之前以編程方式確定,但是您已經對列名稱​​/etc進行了確定。