PHP、jqueryの勉強をしている新参者です。
質問させていただきます。
現在、タグ付き掲示板を作っているのですがスレッド毎にタグをスレッド作成者、閲覧ユーザどちらでも自由に10個まで設定できるようにしたいと思っています。
スレッドtableを添付以下のように作成してみました。
閲覧ユーザがタグを投入した際、このgues_tagに順に1つのformからデータを投入するにはどうしたらよいのか悩んでおります。
当方の経験値としては
・プログラミング3ヶ月目
・LAMP+Jquery勉強中
・MDB2で実践中。
です。
php側でどのように振り分けていけばよいのか頭を悩ませておりまして質問してしまいました。
ご知見のある方、どうかよろしくお願いいたします。
フォームには、タグ入力欄10個用意しといて、php側でタグ1~タグ10までを見て、入力があればそれを一回配列に入れて整えてから入れてくとか。
もっといい方法あるかもしれませんが。
コードで書くと、
if($_POST['Tag1'] != ""){
$Tag[] = $_POST['Tag1'];
}
if($_POST['Tag2'] != ""){
$Tag[] = $_POST['Tag2'];
}
if($_POST['Tag3'] != ""){
$Tag[] = $_POST['Tag3'];
}
if($_POST['Tag4'] != ""){
$Tag[] = $_POST['Tag4'];
}
if($_POST['Tag5'] != ""){
$Tag[] = $_POST['Tag5'];
}
(対応例1)php側で書き込む/書き換える先を切り替える
今現在お考えの方法がコレですが、手順としては、
1.当該スレッドのレコードを読み取る
2.guest_tag_1がNullならguest_tag_1に、違えば次に
3.guest_tag_2がNullならguest_tag_2に、違えば次に
・・・と繰り返すので効率は良くないけれど初心者向け
(対応例1改)
スレッドテーブルに現在利用中のゲストタグの数を入れるフィールドを用意しておくと、
毎回毎回guest_tag_1から順に見ていく必要がなくなるので、
少し処理が軽くなるかもしれない
(対応例2)MySQL側で書き込む/書き換える先を切り替える
ストアドプロシージャを使えばMySQL側で(対応例1)のような事をさせることができる
けれども・・・入力チェックなどはどのみちphp側で行う必要があることなので、
これは実はちょっと面倒で冗長となる場合があり次点以下
(対応例3)データベースを正規化する
これが本命
今回のようなケースでは非正規形にするのではなく素直に正規化して、
guest_tagだけのテーブルを別にしてしまうのが近道だと思われます
この場合は投稿されたものを単純に追加していくだけ
投稿日時を記録しておけば、それがそのまま投稿順
スレッドテーブル:
thread_id, thread_title, member_id, tag, status, created, updated
ゲストタグテーブル:
thread_id, created, tag
この方法であれば10個までという制限についても簡単に変更や管理ができます
(対応例3改)
非正規形に戻ってしまいますがスレッド1つにつき1レコードではなく、
複数のレコードを利用することでテーブルは1つのままという手もよく使います
thread_id, parentthread_id, thread_title, member_id, tag, status, created, updated
parentthread_id が Null ゼロ ならば、そのレコードがスレ主
違えばparentthread_idが示すスレ主にぶら下がっているゲスト
読み取りの際にcreatedで昇順にしておけば、1レコード目がスレ主で、
2レコード目以降がゲストになるのでphp側の処理も楽
以上、ざっくりと・・・
ありがとうございます。
スレッドテーブルと別にしたほうがシンプルな感じですね!
テーブルを作り直してみます。
お返事ありがとうございます。こちら私も思い浮かんだのですが、書き方としてもっとシンプルにできないかと思っております。
2011/10/24 20:25:39