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/