Mysql 按条件对行进行编号
我需要从表中选择行,使行编号为:前3行编号为: 1 2 3Mysql 按条件对行进行编号,mysql,Mysql,我需要从表中选择行,使行编号为:前3行编号为: 1 2 3 你的任务过于复杂了 SET @n = 0 SELECT if((@n := @n + 1) > 3, @n - 3, @n) AS n ... 您遇到了什么错误?我没有获得错误,此查询有效,但不正确,它返回从1到最后一条记录的所有编号。但我需要从第四排开始重新编号,这与你的另一个问题有什么区别:–哪个答案被标记为正确?@feeela,在旧问题中我需要这个编号:1,2,3,1,2,3,1,2,3。在这个问题中,我问,如何进
你的任务过于复杂了
SET @n = 0
SELECT if((@n := @n + 1) > 3, @n - 3, @n) AS n ...
您遇到了什么错误?我没有获得错误,此查询有效,但不正确,它返回从1到最后一条记录的所有编号。但我需要从第四排开始重新编号,这与你的另一个问题有什么区别:–哪个答案被标记为正确?@feeela,在旧问题中我需要这个编号:1,2,3,1,2,3,1,2,3。在这个问题中,我问,如何进行这个编号:1,2,3,1,2,3,4,5,6,7…。谢谢,但如果可以,请告诉我,我的问题中有什么不正确?为什么不正确?因为当
@n
为2时,第一个案例
看到它不是3并将其递增为3,然后第二个案例
看到它是3并将@start\u再次重置为false。在下一次迭代中,@n
为3,但@start\u再次
已为false;第一个案例
从未看到@n
为3且@start\u再次
同时为真的情况。
mysql-> SET @n = 0
mysql-> SET @start_again = 'true'
SELECT
CASE
WHEN @n = 3 AND @start_again = 'true' THEN @n := 1
ELSE @n := @n + 1
END,
CASE
WHEN @n = 3 AND @start_again = 'true' THEN @start_again := 'false'
END
FROM mytable
SET @n = 0
SELECT if((@n := @n + 1) > 3, @n - 3, @n) AS n ...