2012-02-17 49 views
0

我正在使用PHP和MySQL,而且我對數據庫設計也不太熟悉。我知道規範化的基本知識,但是我的問題是關於從我具有的特定形式存儲值。MYSQL將輸入值存儲在一行或多行中

好吧,所以我的頁面被設置的方式,有文本框,可以動態添加或刪除。如果用戶按下「+」或「 - 」按鈕,它將添加或刪除另一個文本框。

無論如何,當我通過$ _POST拉取文本框的值時,它是一個數組,然後使用implode()將它轉換爲字符串例如:用戶輸入「hello」「world」「bye」「world」 implode將它轉換爲以下字符串「hello,world,bye,world」。

我的問題是將這個字符串「hello,world,bye,world」存儲在1行中作爲1項還是更好一些,還是最好將這個字符串分解成4個獨立的字符串並將它存儲在4個不同的字符串中行?每個文本框將包含問題/評論,因此它們可能很長,很可能不像我給出的例子那樣是1個單詞。

我之所以問這個問題,是因爲所有這些輸入都會在同一頁面上使用,所以它們都可以共享一個唯一的ID。而不是查詢多次,我只需要查詢一次。

+1

如果某人在某個字段中輸入了逗號,會發生什麼情況? – 2012-02-17 01:42:39

+0

嗯,非常真實。我總是可以使用「〜」或一些很少使用的字符(並限制它的用法),但我會堅持單獨的行方法。 – user1104854 2012-02-17 01:45:23

回答

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 
+0

非常感謝這些例子。我將在他們身邊存儲一個ID,以便我可以像您所建議的那樣將該ID引用到該頁面。 – user1104854 2012-02-17 01:57:03

1

將此字符串拆分爲4個單獨的字符串並將其存儲在單獨子表中的4個不同行中會更好。