如何将ROW INDEX作为列添加到SQL SELECT查询?

时间:2012-11-25 11:53:00

标签: mysql sql

假设我有这样的SQL查询:

SELECT id, name, index(not a real column) FROM users ORDER BY rating DESC

我想将列添加到代表记录索引的选定列。

示例:

 id    name  rating
 1     a     4
 2     b     2
 3     c     8
 4     d     5

对于这个表我想得到:

 id    name  rating  index
 3     c     8       1
 4     d     5       2
 1     a     4       3
 2     b     2       4

5 个答案:

答案 0 :(得分:18)

尝试以下方法获取row_index:

set @row_num = 0; 
SELECT id,name,rating, @row_num := @row_num + 1 as row_index FROM users
ORDER BY rating desc;

答案 1 :(得分:1)

喜欢的东西 set @cnt=0; select *, @cnt:=@cnt+1 from users order by rating desc;

应该完成这项工作(你需要在每次查询之前设置@cnt)

答案 2 :(得分:0)

当您尝试使用php admin或sql代码时,@ bonCodigo的答案是正确的。 但是如果你想在php中调用一个查询,你应该按如下方式声明:

$sql_query = "SELECT (@row_number:=@row_number + 1) AS 'row_index', id, name, rating FROM (SELECT @row_number:=0) AS temp, users"

$this->db->query ( $sql_query )->result ();

(这段代码用于Code igniter框架)

<强>更新:

但是,一起使用JOIN时无效。在这种情况下,您需要像往常一样读取数据,然后自己添加列索引,您可以从这段代码中了解一下:

$list = $this->db->query ( $sql_query )->result ();

for($i = 0; $i < count($list); $i++ ){
    $list[$i]->no = $i + 1;
}

(这段代码用于Code igniter框架)

答案 3 :(得分:0)

它现在内置在MySQL 8.0和MariaDB 10.2中:

SELECT
  id, name, rating,
  ROW_NUMBER(ORDER BY rating DESC) AS index
FROM users ORDER BY rating DESC

答案 4 :(得分:0)

如果您没有要排序的列,您仍然可以使用ROW_NUMBER()

SELECT 
  id, name, rating,
  ROW_NUMBER(ORDER BY (select 1)) AS index
FROM users