将编号列表列添加到返回的MySQL查询中

时间:2011-01-27 17:40:48

标签: php sql mysql

我正在尝试使用我的sql查询返回一个序列号列。我需要将它放在SELECT语句中,因为我想将此查询嵌套在另一个中,然后使用之前生成的列进行进一步的计算。

我到处寻找,但我找不到任何这方面的例子。

以下内容的效果:

SELECT *, ROW_NUMBER() as row_number from my_awesome_table;

这应该产生这样的东西:

row_number some_column some_other_column
---------- ----------- -----------------
    1        bla bla      bla bla bla 
    2        bla bla      bla bla bla 
    3        bla bla      bla bla bla 
    4        bla bla      bla bla bla 

请注意,some_column和some_other_column是my_awesome_table中的实际现有列,而row_number仅为此查询即时生成。

谢谢! 猪

4 个答案:

答案 0 :(得分:4)

您需要使用MySQL user variables。我们来一个变量t1。在0初始化它。并在每个选择值中增加它。

SET @t1=0;
SELECT @t1 := @t1+1 as row_number, my_awesome_table.* from my_awesome_table

这样就可以了。

答案 1 :(得分:1)

我最喜欢做其他人建议的方法是:

SELECT @rownum := (IFNULL(@rownum, 0) + 1), my_awesome_table.*
FROM my_awesome_table

您应该小心使用SELECT中的用户变量,但 - 作为the docs note

  

“在SELECT @ a,@ a:= @ a + 1,...,你   可能会认为MySQL会评估   @a先做一个作业   第二。但是,改变了   声明(例如,通过添加   GROUP BY,HAVING或ORDER BY子句)   可能导致MySQL选择执行   计划与不同的顺序   评价“。

不同版本的MySQL可能会产生不同的结果。相应地进行测试,并考虑在代码中而不是在查询中对行进行编号。

答案 2 :(得分:0)

SELECT @rownum = @rownum + 1 AS row_number, mat.*
      FROM my_awesome_table mat, 
           (SELECT @rownum := 0) r

答案 3 :(得分:-1)

MySQL不这样做。

一篇小小的谷歌搜索发现了这篇文章:

http://explainextended.com/2009/09/14/mysql-emulating-row_number-with-multiple-order-by-conditions/