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

标签 php mysql duplicates

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

给定一个表“table1”,例如:

enter image description here

我的目标是复制所有类别 ID 为 42 的条目,同时在必要时更新 ParentId:

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。 但我发现这非常慢(相对于包含逻辑的单个查询)。

是否有可能为查询提供某种增量元素敏感逻辑?或者您对如何固定它有什么建议吗?

任何帮助表示赞赏! :)

最佳答案

您没有显示任何代码。我猜你使用 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

关于php - MySql 在 PHP 中自动更新上下文敏感关系的重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45732903/

相关文章:

php - phpmyadmin 中的循环不起作用

php - 为什么这些具有相同样式标签的页面会产生不同的字体大小?

java - 如何使用 Selenium WebDriver 复制表格?

mysql - 在mySQL中撤销用户的权限

java - 具有自定义比较器的 TreeSet 未产生正确的结果

ios - 如何防止sortedArrayUsingSelector删除重复条目(ios)?

php - Laravel 5 路由调用错误 View

PHP 脚本导致段错误然后浏览器要求我下载没有任何内容的 .php 文件?

php - 组织发布数据以插入到一张表的不同行中

python - 两个列表的交集,在第一个列表中保留重复项