1319293374 PHPでタグ付き掲示板のタグの投入方法について


PHP、jqueryの勉強をしている新参者です。
質問させていただきます。

現在、タグ付き掲示板を作っているのですがスレッド毎にタグをスレッド作成者、閲覧ユーザどちらでも自由に10個まで設定できるようにしたいと思っています。

スレッドtableを添付以下のように作成してみました。

閲覧ユーザがタグを投入した際、このgues_tagに順に1つのformからデータを投入するにはどうしたらよいのか悩んでおります。

当方の経験値としては
・プログラミング3ヶ月目
・LAMP+Jquery勉強中
・MDB2で実践中。
です。

php側でどのように振り分けていけばよいのか頭を悩ませておりまして質問してしまいました。

ご知見のある方、どうかよろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/10/29 23:25:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:natakucom No.1

回答回数1ベストアンサー獲得回数0

ポイント50pt

フォームには、タグ入力欄10個用意しといて、php側でタグ1~タグ10までを見て、入力があればそれを一回配列に入れて整えてから入れてくとか。

もっといい方法あるかもしれませんが。

コードで書くと、

    • php側--

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'];

}

id:kuso47

お返事ありがとうございます。こちら私も思い浮かんだのですが、書き方としてもっとシンプルにできないかと思っております。

2011/10/24 20:25:39
id:windofjuly No.2

回答回数2625ベストアンサー獲得回数1149

ポイント50pt

(対応例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側の処理も楽

 

以上、ざっくりと・・・

id:kuso47

ありがとうございます。

スレッドテーブルと別にしたほうがシンプルな感じですね!

テーブルを作り直してみます。

2011/10/24 20:26:31
  • id:kuso47
    すみません、そもそもタグとスレッドの紐付けは別の方法がいい、おかしいなどありましたらそちらもご指摘いただけますと幸いです。
  • id:romer
    スレッドテーブルのtagも私ならtagテーブルに登録しちゃって、
    tagテーブルにmember_id登録しちゃいますね。
    そしたら誰が登録したタグかも管理できますし。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません