假设我有这样的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
答案 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)
$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