我有一个 mysql结果集,如bellow
id name
---------------------
1 abc
1 abc
2 xyz
2 xyz
3 pqr
现在我需要修改结果集,以便它如下所示:
id name
---------------------
1 abc-1
1 abc-2
2 xyz-1
2 xyz-2
3 pqr
摘要是我需要从结果集中为名称列编号,编号仅适用于结果集中具有多个值的行。
那么什么是 MySQL SELECT 查询?
答案 0 :(得分:2)
我认为有3种方法可以解决这个问题:
更新DB中的所有值一次,然后检查每次插入/更新/删除,是否必须更新编号。据我所知,这可以在程序中使用数据库,也可以在触发器
使用SQL查询生成编号 - 这将需要连接表本身的id,组结果和具有相似id的行数。这将以下列方式查看:
select t1.id, t1.name, count(t2.id) from t1, t2 where t1.id = t2.id group by t2.id
(顺便说一下,这个查询可能需要O(N ^ 2)时间,这对于大表来说很长)
然后,您将需要分析第三列并获得最终结果。
通过编程语言对程序中的结果进行后处理。这看起来是最简单有效的解决方案。
答案 1 :(得分:2)
这可能有用,但可能有一种我现在想不到的更好的方法
set @i = 0;
select
f.id,
@i:=@i+1 as i,
case
when c.counter <= 1 then f.name
else concat(f.name,'-',(@i % c.counter) +1)
end as name
from
foo f
join (select id, count(*) as counter from foo group by id) c on c.id = f.id
order by
f.id,name;
编辑:如上面的评论所述,最好在应用程序级别与db
进行此操作