2013-11-22 54 views
-1

我知道你可以选择使用以下查询MYSQL中的重复行:重命名重复记录与PHP

SELECT ID, bedrijfsnaam, plaats, COUNT(*) 
FROM profiles 
GROUP BY bedrijfsnaam, plaats 
HAVING COUNT(*) >1 

我希望能够选择的副本,并将它们与PHP重命名。那可能吗? 如果它发现一个'bedrijfsnaam-plaats'组合的三个重复项,我想在'bedrijfsnaam'值的末尾添加 'I','II','III'。这甚至有可能吗?有没有 我可以运行某种循环?

谢谢..

+0

是的。这是可能的 - 虽然罗马数字的规则有点麻烦 – Strawberry

+0

在软件中,几乎所有'有可能'的答案都是'是'。这也不例外。真正的问题是'它花多少钱?'尝试一下,如果你被卡住了,发布代码 – 2013-11-22 21:37:50

回答

1

我觉得这两个查询可以是一个答案:

create table maptable as 
SELECT 
    p2.ID, 
    concat(p2.bedrijfsnaam,count(*)) as bedrijfsnaam_new 
FROM profiles p 
JOIN profiles p2 on p2.bedrijfsnaam = p.bedrijfsnaam 
AND p2.plaats = p.plaats 
AND p2.ID > p.ID 
group by p2.id,p2.bedrijfsnaam, p2.plaats; 

update 
    profiles, 
    maptable 
set 
    profiles.bedrijfsnaam=bedrijfsnaam_new 
where 
    profiles.id=maptable.id; 

第一部分是根据丹尼斯的答案...

+0

我认为OP想要罗马数字。 :-P –

+0

:-) 对于小数字,可以使用'repeat('I',count(*))'而不是'count(*)'......但是,这给出了正确的罗马数字只有四... –

+0

Yeyeyeye。我们能做到这一点。 :-) –

1

相反计数的,你可以找到直接是的DUP行:

SELECT DISTINCT p2.ID, p2.bedrijfsnaam, p2.plaats 
FROM profiles p 
JOIN profiles p2 on p2.bedrijfsnaam = p.bedrijfsnaam 
AND p2.plaats = p.plaats 
AND p2.ID > p.ID   -- this is where the magic occurs 

然后相应运行更新...

+0

Downvoter谨慎解释为什么? –

+0

也许,但这不是问题的答案。 – 2013-11-22 21:39:18

+0

@MikeW:好吧,希望OP能从那里拿走它并运行更新...... –