MySql在PHP中自动更新上下文敏感关系的重复条目

时间:2017-08-17 10:39:31

标签: php mysql duplicates

是否有可能通过自动更新上下文敏感关系来复制特定条目?

给出表格' table1'像:

enter image description here

我的目标是在必要时更新parentId时复制categoryId 42的所有条目:

enter image description here

id是一个自动递增的列,parentId用于标识条目之间的关系。

目前我一个接一个地插入它们,选择旧数据并在PHP中管理parentId的逻辑。

//Thats simplified what I do ($conn is a Zend_Db_Adapter_Abstract)
$rows = $conn->fetchAll("SELECT * FROM table1 WHERE categoryId = 42 ORDER BY parentId ASC");
$newIds = [];
foreach($rows as $row){
    if(array_key_exists($row['parentId'],$newIds))
        $row['parentId'] = $newIds[$row['parentId']];
    else
        $row['parentId'] = null;

    $conn->query("INSERT INTO table1 (parentId,info,categoryId) VALUES (?,?,?)",[$row['parentId'],$row['info'],$row['categoryId']]);

    $newId = $conn->lastInsertId('table1');

    $newIds[$row['id']] = $newId;
}

我坚持这个,因为我需要新元素的lastInsertedId为下一个元素设置新的parentId。 但我觉得这很慢(相对于包含逻辑的单个查询)。

是否有可能为查询提供某种增量元素敏感逻辑?或者您对如何加以解决有任何建议吗?

任何帮助表示赞赏! :)

1 个答案:

答案 0 :(得分:0)

您没有显示任何代码。我猜你使用mysqli_insert_id()来获取最后插入的ID。也许你可以用MAX(ID)+1做点什么。

类似的东西:

INSERT INTO table1 
  SELECT MAX(ID)+1, 
  info, 
  categoryId    
FROM 
  table1
WHERE .............. -- the conditions to retreive the parent