MYSQL将输入值存储在一行或多行中

时间:2012-02-17 01:38:49

标签: php mysql database

我正在使用PHP和MySQL,而且我对数据库设计经验不足。我知道规范化的基础知识,但我的问题是关于从我拥有的特定形式存储数据。

好的,所以设置我的页面的方式,有可以动态添加或删除的文本框。如果用户按下" +"或" - "按钮,它添加或删除另一个文本框。

无论如何,当我通过$ _POST拉取文本框值时,它是一个数组,然后我使用implode()将其转换为字符串Ex:用户输入" hello" "世界" "再见" " world",implode将其转换为以下字符串" hello,world,bye,world"。

我的问题是存储这个字符串"你好,世界,再见,世界"在1行作为1个条目,或者将这个字符串分成4个单独的字符串并将其存储在4个不同的行中会更好吗?每个文本框都会包含问题/评论,因此它们可能很长,很可能不像我给出的示例那样只有一个字。

我之所以这样问是因为所有这些输入都将在同一页面上使用,因此它们都可以共享一个唯一的ID。我不是多次查询,而只需要查询一次。

2 个答案:

答案 0 :(得分:1)

它们应该单独存储,因为它们是一种数据的单独示例。

您的表格(例如)comments,每行应该是一条评论,因此hello有一行,world有一行等等。

您还可以在评论旁边存储页面ID,因此您的表格看起来像这样(请注意,您通常还会在评论ID中添加id字段。为简洁起见,我省略了它):

|--------------|---------|
| comment      | page_id |
|--------------|---------|
| hello        | 1       |
| world        | 1       |
| bye          | 2       |
|--------------|---------|

然后你仍然可以在page_id上​​搜索,但你的数据在逻辑上是分开的,你可以根据需要搜索特定的评论。

SELECT * FROM comments WHERE page_id = 1 -- 2 results

您也可以非常轻松地按字母顺序排序,或按时间排序(使用新列)。

|--------------|---------|------------|
| comment      | page_id | time_made  |
|--------------|---------|------------|
| hello        | 1       | 1234567890 |
| world        | 1       | 2356480546 |
| bye          | 2       | 5168161543 |
|--------------|---------|------------|

SELECT * FROM comments WHERE page_id = 1 ORDER BY time_made DESC -- most recent first

答案 1 :(得分:1)

最好将此字符串分成4个单独的字符串,并将其存储在单独的子表中的4个不同的行中。