更新标签(Toxi解决方案)问题

时间:2011-08-10 14:50:09

标签: mysql

所以我有六个类别,我的数据库中的条目被标记。插入原始条目后,将从复选框形式中选择它们,将POSTED作为数组并按如下方式插入:

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条目设置为最后一个,新的,编辑表单上的tag_id,而不是所选的任何新标签。这有意义吗?

任何人都可以帮忙编辑我的更新查询吗?

1 个答案:

答案 0 :(得分:0)

根据我的理解,我认为您需要先操纵数据......

  1. 创建数组
  2. 检查用户是否标记了它($ newTags)
  3. 如果他们确实标记了它,请检查它是否已经存在于现有阵列中。如果没有,请插入
  4. 如果他们没有标记,请检查它是否在现有阵列中。如果是,则删除它
  5. 示例:

    $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*/}
       }
    }
    

    希望这是有道理的。应该可以编写一个更简洁的代码版本!