php - 重命名 MySQL 中的重复行

标签 php mysql duplicates

stackoverflow 中有一些类似的主题,但我仍然没有成功重命名我的重复行:

CREATE TABLE IF NOT EXISTS `products` (
`product_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`product_code` varchar(32) NOT NULL,
PRIMARY KEY (`product_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

INSERT INTO `products` (`product_id`, `product_code`) VALUES
(1, 'A'),
(2, 'B'),
(3, 'A');

这里第一行和第三行有相同的项目。我只想添加一个后缀,例如“复制”。结果将是:

product_id    product_code
-----------  --------------
    1               A
    2               B
    3            A Copy

那么如何在 MySQL 中解决这个问题呢?

编辑:上面的数据是一个示例。我原来的表有超过 3000 个产品。

最佳答案

如果您可以使用 PHP,我建议您通过 PHP 进行操作。我还没有找到使用 MySQL 实现此目的的方法。这将更新计数 > 1 的所有行,包括原始行。

UPDATE table
SET product_code = CONCAT(product_code, ' Copy')
GROUP BY product_code
HAVING COUNT(*) > 1

这是你不想要的。因此,如果您使用 php,则可以执行此操作(假设表中的行数较少(3000 行即可))

<?php
$result = mysql_query("SELECT * FROM table");
$rowsCnt = array();
while($row = mysql_fetch_assoc($result)){
    $rows[] = $row;
    $rowsCnt[ $row['product_code'] ]++;
}

foreach($rows as $index => $row) {
    if ($rowsCnt[ $row['product_code'] ] > 1) {
        mysql_query("UPDATE table SET product_code = '".mysql_real_escape_string($row['product_code'])." Copy' LIMIT ".($rowsCnt[ $row['product_code'] ] - 1)
    }
}

免责声明:未经测试!先备份一下!

关于php - 重命名 MySQL 中的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8213054/

相关文章:

javascript - 如何将文件上传与尚未创建的表单提交相关联?

php - 表格数据每行的编辑和删除按钮?

mysql - 我可以使用 * 选择 MySQL 表中的所有字段来查找和替换字符串吗?

java - 如何修复 my/hibernate.cfg.xml 文件?

sql - 将值插入到 varbinary 时出现重复问题

php - 输入值与发送到 POST 的值不同

PHP ini_set session gc_maxlifetime 不工作

php - 在每个 div 选项卡中显示一个随机测试问题

vector - 如何检查结构的集合是否在字段中具有重复的值?

python - Pandas :TypeError:无法散列的类型: 'list'