存储运算符和比较值的更好方法

时间:2013-12-13 16:27:09

标签: php mysql

我需要将运算符及其值存储到数据库中,因为在循环之后,我必须对价格计算进行比较。

这些值来自HTML表单,几乎没有问题,即:

问题:有多少项?
答案:< (选择选项) 10 (文本框)

问题:什么时候?
答案:= (选择选项) 2013-12-13 (文本框)

将这两个值存储到具有多个问题的表字段中的最佳方法是什么? 用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),
    ...
);

更新
我错过了帖子的一个重要部分,我更新了问题:我的表格是多个答案字段。

2 个答案:

答案 0 :(得分:0)

这听起来像是mysql数据库的设计违背了良好的DBMS设计原则。

如果您在表单中有已知问题,则不要将所有问题的答案都放入通用答案字段中。

你肯定想存储&#34;小于/等于/ etc&#34;离散字段中的运算符,但您还希望将日期存储在日期字段中。和项目数量以适当的整数/数字表示。

根据您的问题,我没有足够的信息来了解您是否需要更复杂的数据结构(例如问题表等),但根据您提供的信息,您会想要更多类似的信息:

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表单的结构。用户是否真的会说他们想要&#34;少于10件&#34;?我假设他们会知道(或估计)他们想要多少件物品。如果您最终根据商品数量向他们提供特殊处理/优惠/等等,请让他们选择您最终会使用的商品范围,即填充1-9件商品的选项列表/ 10-50项/ 51-100项等。

答案 1 :(得分: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 /等执行此操作。