0

私は、ユーザーが投稿を書いてタグ付けできるようにするプロジェクトに取り組んでいます。最後に他のユーザーが参加し、最高の投稿に投票します。

タグ付けの課題に直面するまで、すべてが魔法のように進んでいました。それらに対処する最も簡単な方法を見つける方法は?

多対多の関係を使用して、各投稿に多数のタグを割り当てました。しかし、データベースに挿入する前に問題が見つかりました。「このタグがまだ DB に保存されていないことをどのように知ることができますか?」(もちろん、名前フィールドを UNIQUE として入力しますが、誰かが事前に保存されたタグを入力すると、私が知らない codeigniter エラーに直面します。表示されたくない.) ..

要するに、私はこの解決策を思いつきました:

  1. DB からすべてのタグを取得します。
  2. 配列 $all に格納します。
  3. ユーザーが入力したタグを取得します。
  4. それらを配列 $user に格納する
  5. $existed 交差点を作る
  6. foreach ループで
    • 現在のタグの ID についてタグ テーブルをクエリします。
    • posts_has_tags テーブルに ID を挿入します。
  7. 他の配列については、それぞれに別の配列を作成します
    • タグをタグ テーブルに挿入します。
    • insert_id() $id を取得する
    • $id を posts_has_tags テーブルに挿入します。

まあ、私はそれが一種の混乱であることを知っています。特に、時間の経過とともに少し大きくなる可能性のある配列でループする場合..だから、私はあなたたちに尋ねています:)私は正しいですか..?もっと簡単な方法はありますか..?

ありがとう。

4

1 に答える 1

0

あなたはこれを行うことができます:

SELECT * FROM `tags` WHERE `name`=:name_1 OR `name=:name_2 ...

次に、結果のタグを取得して、ユーザーのタグ配列から削除できます。

foreach ($user_tags as $tag) {
    if (!in_array($tag, $db_tags)) {
        $new_tags[] = $tag;
    }
}

この方法では 2 つのクエリしかありませんが、このコードを競合状態から保護する方法についてはわかりません。

于 2012-07-22T03:40:03.330 に答える