编号MySQL结果行

时间:2010-10-25 10:19:32

标签: sql mysql resultset

我有一个 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 查询

2 个答案:

答案 0 :(得分:2)

我认为有3种方法可以解决这个问题:

  1. 更新DB中的所有值一次,然后检查每次插入/更新/删除,是否必须更新编号。据我所知,这可以在程序中使用数据库,也可以在触发器

  2. 中完成
  3. 使用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)时间,这对于大表来说很长) 然后,您将需要分析第三列并获得最终结果。

  4. 通过编程语言对程序中的结果进行后处理。这看起来是最简单有效的解决方案。

答案 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

进行此操作