从表中按顺序显示记录而不依赖于表的id?

时间:2016-03-13 23:59:14

标签: mysql sql database

我有一个由3列组成的表,表中的记录数经常在表的多次插入和删除操作后发生变化,所以表中的自动增量id不能给我一个准确的序列提取的记录。例如,在某些时候,我想根据条件获取一组记录(一次一个)。这10条记录的ID不会按顺序排列。那么我怎么能说这10个中的第五个记录呢?

 select @num:=@num+1 as id, x, y from test where g=true;

上面的查询为我提供了顺序键(id)所需的记录组,但我不想一起获取所有这些记录,我希望每个记录单独按顺序排列。

2 个答案:

答案 0 :(得分:2)

您可以使用LIMIT子句从特定偏移处的序列中进行选择:

select id, x, y
  from test
 where g=true
 limit 4, 1;

请注意,除非您使用ORDER BY,否则无法保证结果将以任何一致的顺序排列。在您的情况下,您可以订购id

答案 1 :(得分:1)

如果我正确理解你的问题,你可以使用子查询 - 你也应该初始化user defined variable

select *
from (
    select @num:=@num+1 as id, x, y 
    from test cross join (select @num:=0) t
    where g=true
    order by test.id
) y
where id = 5

此外,您希望在子查询中包含order by - 大概是order by test.id以保证结果的顺序。