2011-08-10 8 views
1

私のデータベースにはタグが付けられているという6つのカテゴリがあります。オリジナルのエントリが挿入されると、それらは、チェックボックス形式から選択されたアレイとして計上し、次のように挿入されていますタグを更新する(Toxi solution)問題

foreach ($cat as $item) 
{ 
$sql = 
"INSERT INTO tag_relational (job_id, tag_id) VALUES ('$job_id', '$item')"; 
$result=mysql_query($sql); 
} 

私は今、人々は彼らのリストを編集することができます「編集」セクションを持っていますが、私はタグを更新する方法としてちょっと残っています。私はこれを試しました:

しかし、そう思われるのは、既存の各エントリを同じtag_idに設定することだけです。

たとえば、4つの異なるタグが付いている元の投稿(すべてあらかじめ設定されており、特定のリストからのみ選択できます)の場合、元のjob_idエントリのそれぞれをLAST、NEW 、編集フォームのtag_idではなく、新しいタグを選択します。それは理にかなっていますか?

誰でも私の更新クエリの編集を手伝うことができますか?

答えて

0

私が理解から、私はあなたが最初にあなたのデータを操作する必要があると思う彼らがした場合は...

  1. は、ユーザーがそれをマークかどうかを確認するために配列
  2. チェック($ newTags)
  3. を作成します。それをマークして、それが既に存在するアレイにあるかどうかを確認してください。そうでない場合は、それを挿入してください
  4. もしマークしていなければ、それが既存の配列にあるかどうかを確認してください。そうである場合、

例、それを削除します。

$availableTags=array(1,2,3,4,5); 
$existingTags=array(2,3,5); 
$newTags=array(1,2); 

foreach ($availableTags as $value) 
{ 
    if(in_array($value,$newTags)){ //This SHOULD be in your table 
     if(in_array($value,$existingTags)){/* Already in tag_relational, ignore it*/} 
     else {/* INSERT it into tag_relational */} 
    } 
    else { //This should NOT be in your table, check if it already existed 
    if(in_array($value,$existingTags)){/* DELETE it from tag_relational*/} 
    } 
} 

をうまくいけば、これは理にかなっています。このコードのより簡潔なバージョンを書くことが可能でなければなりません!

+0

こんにちはマット、tag_relationalには、メインテーブルから外部キー(job_id)を追加するフィールドと、タグがリストされた外部キーを追加する2つのフィールドがあります。ユニークなID。したがって、job_id 423のエントリは、外部キー3,4,6を追加することができます。 – Dan

+0

明確にするために、tag_relationalテーブル内のジョブに関連付けられたタグを更新しようとしていますか? – Matt

+0

はい、正確です。申し訳ありませんが、私は私の元の質問が少し曇っていたことを知っている! – Dan