0

我正在一个网站上工作,我想向其中添加一个新部分,其中将包含一个用于存储该数据的高级表单。将有大约 20-30 个字段,其中很少有多个选项复选框表示这些选项提交时的 eq 数组值。该字段将具有固定数量的选择,这些选择永远不会改变,也永远不会添加新的选择。例如字段一将有choice1、choice2、choice3。字段 2 将有 10 个,字段 3 将有 5 个。

为它们创建单独的数据库表并通过其 id 引用它们不是有点矫枉过正吗?每次我想访问或存储新的值时,将它们保存为 varchar 字段 eq implode 和 eplode 下的逗号分隔值不是更好吗?

我也很难弄清楚以后如何使用它。因为如果我将它们保存为单独的表并通过其 id 引用它,那么我的查询将输出这些字段的每个组合。例如,这将导致一条记录有 150 行。对于这个子多个值,如何使用嵌套数组将其转换回单个数组值?例如'id'=>1, 'title' => 'Lorem Ipsum', 'choices' => array('choice2','choice2').....


更新:为了更好地说明我想要做什么,我在这里创建了一个简化的表单模型 - > http://www.anony.ws/i/2013/08/13/SsD5A.gif它不是我将成为的实际形式使用,因为我还没有构建它,但它已经足够接近了。您可以忽略我已经知道以后如何保存或使用它们的其他字段。

我确实需要一些帮助是复选框组。我需要存储选定的值,稍后我将需要使用它们。我需要能够搜索它们,我需要能够显示该数据。我还需要能够创建一些评论系统(我之前已经这样做了,所以基本上我只需要能够通过其数据库 ID 引用此表单中的数据。可能是一些更新或其他基本内容。

主要的事情是保存这个选择并搜索/显示它的数据。如果我可以从 1 个数组/obect 中的数据库中获取数据,并使用一些嵌套数组来进行多种选择,那将是非常棒的。就像我在更新之前在这篇文章的末尾画的那样。

4

2 回答 2

2

问自己以下问题: 我是否需要评估客户所做的选择?

如果这样做,将它们放在普通的逗号分隔列表中将是一个非常丑陋的操作。如果你真的只是想记录选择,你可以继续 implode/explode。

以标准化的方式进行:

您的表格方案:

checkbox_id | customer_id | value

当客户提交他的选择时,您将只插入选中的复选框:

foreach (checkbox in POST) {
    INSERT IGNORE INTO `table` (`checkbox_id`, `customer_id`, `value`) VALUES (checkbox, customer, 1)
}

如果您想稍后阅读客户的选择,请访问:

SELECT `checkbox_id`, `value` FROM `table` WHERE `customer_id` = ? ORDER BY `checkbox_id`, `value`

这将为您提供指定客户所做的所有选择的列表。如果您需要它们在数组中,请使用一些功能:

function array returnChoicesAsArray(query, checkbox_id) {
    array = [];

    foreach (row in query) {
        if (row.checkbox_id == checkbox_id)
            array.add(row.value);
    }

    return array;
}

并为您的每个复选框调用他们。

如果您想评估复选框的选择,您可以轻松地对其进行查询:

SELECT COUNT(*) FROM `table` GROUP BY `checkbox_id`
于 2013-08-11T15:11:26.477 回答
-3

不要打扰您自己序列化您的数组/对象并将其存储在一个简单的 varchar 行中,例如您有以下数组:

$selection = 数组 ('selection1'=>'value1','selection2'=>array('selectionn'=>'valuen') ....

$serialized = 序列化($selection);

然后在您可以检索记录并对其进行反序列化以恢复整个数组/对象后将其存储到数据库中。

于 2013-08-11T15:41:58.537 回答