2011-08-10 52 views
1

所以我有六個類別,我的數據庫中的條目被標記。當插入原來的條目,它們是從一個複選框選擇的形式,張貼一個數組,並插入如下:更新標籤(Toxi解決方案)問題

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

我現在有一個「編輯」部分,在那裏人們可以編輯自己的物品,但我有點卡住如何更新標籤。我試過這個:

foreach ($cat as $item) 
{ 
$sql = 
"UPDATE tag_relational SET tag_id ='$item' where job_id = $job_id"; 
$result=mysql_query($sql); 
} 

但似乎要做的就是將每個現有條目設置爲相同的tag_id。例如,假設原始帖子有四個不同的標籤(這些標籤都是預先設置的,他們只能從某個列表中選擇),則上面會設置每個原始job_id條目,而不是最後一個,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

您好Matt在tag_relational中有兩個字段,一個是從主表中添加外鍵(job_id),另一個是從標籤表中添加外鍵,其中標籤列出一個唯一的ID。因此,如果選擇了這些標籤,那麼帶有job_id 423的條目可能會添加外鍵3,4和6,這有助於嗎? – Dan

+0

好的。只是爲了澄清,你正試圖更新tag_relational表中與作業相關的標籤? – Matt

+0

是的,確切地說。對不起,我知道我原來的問題有點朦朧! – Dan