2012-02-17 9 views
0

PHPとMySQLで作業しています。データベース設計にあまり経験はありません。私は正規化の基礎を知っていますが、私の質問は私が持っている特定の形式の値を格納することです。入力値を1行または複数の行に格納するMYSQL

私のページが設定されているように、動的に追加または削除できるテキストボックスがあります。ユーザーが「+」または「 - 」ボタンを押すと、別のテキストボックスが追加または削除されます。

とにかく、$ _POST経由でテキストボックスの値をプルすると配列になり、implode()を使って文字列に変換します。例: "hello" "world" "bye" "world" implodeはそれを次の文字列 "hello、world、bye、world"に変換します。

私の質問では、この文字列 "hello、world、bye、world"を1行に1つのエントリとして保存する方が良いか、この文字列を4つの別々の文字列に分割して4つの異なる行?それぞれのテキストボックスには質問/コメントが含まれているので、私が与えた例のように、潜在的に長くて、おそらく1語ではない可能性があります。

私がこれを求めている理由は、これらの入力がすべて同じページで使用されるため、すべてが一意のIDを共有できるからです。複数回クエリを実行する代わりに、クエリを1回実行するだけで済みます。

+1

誰かがフィールドの1つにカンマを入力するとどうなりますか? –

+0

まあ、本当です。私はいつも "〜"かまれにしか使われていないキャラクターを使うことができます(そしてその使用法を制限しています)が、私は別の行方法に固執します。 – user1104854

答えて

1

これは、1種類のデータの別の例であるため、別々に保存する必要があります。

など、あなたのテーブルにはcomments(例えば)になり、各行はhelloのための1つのコメントなので、1行である必要があり、worldのための1

またそう、コメントと一緒にページのIDを保存することができそして、あなたはまだpage_idの上で検索し、しかし、あなたのことができ

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

:あなたの表は、この(。あなたは、一般的にも、コメントIDの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を格納するつもりですので、あなたが示唆したようにそれをそのページに参​​照することができます。 – user1104854

1

この文字列を4つの別々の文字列に分割し、別々の子テーブルに4つの異なる行に格納する方がよいでしょう。

関連する問題