如何在MySQL视图中生成序号?

如何在MySQL视图中生成序号?,mysql,Mysql,我正在Linux下使用MySQL 5.6 我有一个表,让用户输入一个from数字和一个to数字 然后,有一个视图可以从另一个表中选择一些记录,该表的帐号介于from编号和to编号之间 最困难的问题是,用户需要视图中每个记录的序列号,从1开始。例如,如果视图显示37行,则序列号应从1、2、3、。。。直到37岁,没有跳跃号码。视图的排序顺序并不重要 我知道MySQL表中有自动递增列。但是,对于我的情况,我必须使用视图,而不是表 有人知道怎么做吗 顺便说一句,我必须使用视图,而不是SELECT语句。用

我正在Linux下使用MySQL 5.6

我有一个表,让用户输入一个from数字和一个to数字

然后,有一个视图可以从另一个表中选择一些记录,该表的帐号介于from编号和to编号之间

最困难的问题是,用户需要视图中每个记录的序列号,从1开始。例如,如果视图显示37行,则序列号应从1、2、3、。。。直到37岁,没有跳跃号码。视图的排序顺序并不重要

我知道MySQL表中有自动递增列。但是,对于我的情况,我必须使用视图,而不是表

有人知道怎么做吗

顺便说一句,我必须使用视图,而不是SELECT语句。用户不知道如何输入SELECT语句,但他们知道如何单击视图查看视图。

您可以查看我在此处报告的答案:

MySQL中没有排名功能。你能得到的最接近的是 要使用变量,请执行以下操作:

SELECT t.*, 
       @rownum := @rownum + 1 AS rank
  FROM YOUR_TABLE t, 
       (SELECT @rownum := 0) r
通过这种方式,您可以在结果中添加行计数器

顺便说一句,我必须使用视图,而不是SELECT语句。用户需要 不知道如何输入SELECT语句,但他们知道如何单击 查看以查看视图

从技术上讲,你需要类似这样的东西来模拟排名或行号

CREATE VIEW table_view 
AS
 SELECT
  *
  , (@row_number := @row_number + 1) AS row_number 
 FROM 
  table
 # Because a SQL table is a unsorted set off data ORDER BY is needed to get stabile ordered results.
 ORDER BY
  table.column ASC 
CROSS JOIN (SELECT @row_number := 0) AS init_user_var  
无法使用此SQL代码。如果尝试使用用户变量创建视图,将出现以下错误

Error Code: 1351
View's SELECT contains a variable or parameter
下面的SQL代码还可以生成行号。 这假设您有一个id列,该列是通过自动增量生成的。 但是子查询是一个相关的子查询,这使得在较大的表上执行速度非常慢,因为需要对每个记录执行计数

CREATE VIEW table_view
AS
 SELECT 
  *
  , (SELECT COUNT(*) + 1 FROM table inner WHERE inner.id < outer.id) AS row_number
 FROM 
   table outer

那个序列将用于什么?你不能在任何查询中使用它,那么它有什么意义呢?@Mjh的可能重复在查询中有无数种方法可以使用序列或行数,这就是为什么大多数数据库已经有了排名functions@PanagiotisKanavos像这样的序列生成,不引用视图中任何表的任何主键是绝对无用的。我知道你认为你是对的,但是有一个很简单的方法来验证我说的话——使用它。尤其是在稍微大一点的桌子上。我已经知道结果了,但请自娱自乐。另外,这不是所讨论的RDBMS的标签。@Mjh我知道,我一直使用序列和行号,这就是为什么我说它非常有用的原因。无论是排名、页面结果还是跨表生成唯一ID,序列和行号都非常有用。无论如何,在这种情况下,您应该将问题标记为Duplicate,但在我看来,MySQL 5.6无法创建带有子查询的视图。下一步让我试试Monday@AlvinSIU还有其他一些技巧。选择t.id,从表中选择COUNT*,其中idCREATE VIEW table_view AS SELECT * # Because a SQL table is a unsorted set off data ORDER BY is needed to get stabile ordered results. , (ROW_NUMBER() OVER (ORDER BY table.column ASC)) AS row_number FROM table