如何操纵记录的ID顺序?

时间:2018-07-03 03:50:17

标签: php mysql

我正在尝试选择一组列表并以重新编号的方式获取结果。

例如

ID名称

  1. jack
  2. jack
  3. 保罗
  4. 鲍勃
  5. 鲍勃
  6. 保罗
  7. 鲍勃

说我选择name ='bob',因此得到其ID号4,5,7

现在我希望结果是

依次按1、2、3 ...

代替4、5、7 ...

因为它是鲍勃的第一个第二个和第三个,依此类推...

最简单的方法是什么?

2 个答案:

答案 0 :(得分:0)

这里mysql变量可以完成工作。声明并初始化变量@a = 0,分配一个递增的值,然后在查询中进行选择。查询应如下所示:

SET @a = 0;
SELECT @a := @a + 1 AS id, name FROM table_name WHERE name = 'bob';
SET @a = 0;

最后,再次设置@a = 0的值。

答案 1 :(得分:0)

如果使用的是Mysql 8,则可以使用窗口函数rank()common table expression

with ordered_data as (
  select *, 
  rank() over (partition by name order by id asc ) rnk
  from your_table
  order by rnk
)
select * from ordered_data where name = 'bob';

或者,如果您使用的是旧版本,则可以使用相关查询来获取排名

select a.id,a.name,
    (select count(*) 
    from your_table 
     where name= a.name 
     and id <= a.id) rnk
from your_table a
where a.name = 'bob'
order by a.id;

Demo