首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL结果行编号

MySQL结果行编号
EN

Stack Overflow用户
提问于 2010-10-25 10:19:32
回答 2查看 398关注 0票数 3

我有一个类似于下面的mysql结果集

代码语言:javascript
复制
id        name
---------------------
1         abc
1         abc
2         xyz
2         xyz
3         pqr

现在,我需要修改结果集,以便如下所示:

代码语言:javascript
复制
id        name
---------------------
1         abc-1
1         abc-2
2         xyz-1
2         xyz-2
3         pqr

总结是,我需要对结果集中的名称列进行编号,而编号只适用于结果集中有多个值的行。

那么,什么将是MySQL SELECT 查询

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-25 10:37:15

这也许可行,但也许还有更好的办法,我现在想不起来

代码语言:javascript
复制
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之间这样做。

票数 2
EN

Stack Overflow用户

发布于 2010-10-25 10:33:08

我认为解决这一问题的方法有三种:

  1. 更新DB中的所有值一次,然后检查每个insert/update/delete,是否需要更新编号。据我所知,这可以在使用数据库的程序中完成,也可以在使用triggers
  2. Generate编号的SQL中完成--这将需要在id、分组结果和具有类似id的行数上使用连接表。select t1.id, t1.name, count(t2.id) from t1, t2 where t1.id = t2.id group by t2.id (BTW,此查询可能需要O(N^2)时间,对于大型表来说是很长的时间),然后您将不得不分析第三列并获得最终结果。
  3. 通过编程语言对程序中的结果进行后处理。这看起来是最简单、最有效的解决方案。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4013609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档