名称所在的行号

时间:2016-12-09 16:46:46

标签: php mysql

使用PHP / MySQL。如何获取名称所在行的行数或位置数? 实施例

 ________________  Row
|__ name_|_ age _|  1
| Joe    |  30   |  2
| Henry  |  24   |  3
| Rick   |  55   |  4
| Tom    |  19   |  5 

数据库中没有行号 所以我想要一个代码,通过它我可以使用他们的名字并获得行的位置。 就像名字叫汤姆一样 - 它会回应汤姆位于第5行。 谢谢!

1 个答案:

答案 0 :(得分:-1)

使用用户变量可以模拟row_number函数。

请记住,每次运行查询时,分配给每个人的#都会有所不同。按dateRegistered而不是name命令可能有所帮助,但如果发生任何插入,更新或删除,添加新记录,删除一个或将dateRegistered更改为过去的时间,可能会更改此编号。

SELECT A.*, @rn := @rn+1 as Row
FROM aTable A 
CROSS JOIN (Select @rn :=0) B 
ORDER BY Name  

Working SQL fiddle

现在,如果你想要永久身份证...... 如果你希望ID按照日期的顺序排列,请务必更改更新以将订单更改为日期字段,但实际上无关紧要,因为以这种方式生成的PK(代理键)没有除了唯一标识记录之外的其他意义。

create table atable (
   name varchar(10),
  age int);

  Insert into atable values
  ('Joe',30),
  ('Henry',24),
  ('Rick',55),
  ('Tom',19);


ALTER table atable add column ID int;

Update atable 
INNER JOIN (
  SELECT A.*, @rn := @rn+1 as Row
  FROM aTable A 
  CROSS JOIN (Select @rn :=0) B 
  ORDER BY Name) B
  on atable.Name = B.Name
 and atable.Age = B.Age
set atable.id = B.Row;

ALTER TABLE atable MODIFY ID int NOT NULL primary key AUTO_INCREMENT;

Working fiddle