php - 更新列,使重复的值变得唯一
问题描述
列title
有很多重复的值,不止一次。
我需要更新列,例如如果'gold'
重复 - 它变成'gold 1'
,'gold 2'
等。
像这样的东西:
$st = $db->query("select id, title from arts order by title asc");
$st->execute();
$x = 0;
while($row = $st->fetch()){
$title = $row['title'];
//if($title.is duplicated){
$x++;
$title .= ' ' . $x;
$stb = $db->query("update arts set title = '" . $title . "' where id = " . $row['id']);
$stb->execute();
}
}
有什么帮助吗?
解决方案
这适用于 MySql 5.7:
update arts a inner join (
select * from (
select t.id,
(
select count(*) + 1 from arts
where id < t.id and title = t.title
) counter
from arts t
) t
) t on t.id = a.id
set a.title = concat(a.title, ' ', t.counter)
where a.title in (
select h.title from (
select title from arts
group by title
having count(*) > 1
) h
);
请参阅演示。
对于数据:
| id | title |
| --- | -------- |
| 1 | silver |
| 2 | gold |
| 3 | diamond |
| 4 | bronze |
| 5 | gold |
| 6 | bronze |
| 7 | gold |
结果是
| id | title |
| --- | -------- |
| 1 | silver |
| 2 | gold 1 |
| 3 | diamond |
| 4 | bronze 1 |
| 5 | gold 2 |
| 6 | bronze 2 |
| 7 | gold 3 |
推荐阅读
- html - 将颜色主题更改为 HTML markdown
- file - 将数据附加到文件并确保它不会损坏
- javascript - 我正在尝试将 JS 数据传递到服务器端 python 的简单的 hello world
- javascript - 在javascript中将对象存储在数组中
- django - Django 数据透视表创建
- hadoop - org.apache.hadoop.fs.ParentNotDirectoryException: /tmp (不是目录)
- php - 通过每个选择中的两个不同列对具有两个选择的联合进行排序
- django - POST http://127.0.0.1:8000/api/register/ 400(未授权)
- javascript - 使用 jest customFormat 和默认 printf 测试记录器
- ios - 如何将自定义数据与通过 Smooch SDK 发送的任何消息关联?