SELECT の出力に連番を振りたい場合は良くあると思います。 主キーは削除したりすれば欠番が生じたりしますし、いろんな条件を付加したりソート指定を行って連番を表示したい場合があります。
そんな時には、MySQL の ユーザー定義変数 を SET コマンドで宣言し、それをカウンタの様にして使うことで 連番の発生を行うことができます。
SET @no = 0; SELECT (@no := @no + 1) as no, t_auto.* from t_auto order by id desc;
このSQLを実行すると以下の様になります。
MariaDB [test]> SET @no = 0; Query OK, 0 rows affected (0.39 sec) MariaDB [test]> SELECT (@no := @no + 1) as no, t_auto.* from t_auto order by id desc; +------+----+--------+ | no | id | val | +------+----+--------+ | 1 | 5 | test-a | | 2 | 4 | test4 | | 3 | 2 | test2 | | 4 | 1 | test1 | +------+----+--------+ 4 rows in set (0.22 sec)
SET コマンドの部分を SELECT の FROM句 の中に入れてしまうと以下の様にできます。
select @no := @no + 1 as no, t_auto.* from (select @no := 0) as dmy, t_auto order by id desc;
このSQLを実行すると以下の様になります。
MariaDB [test]> select @no := @no + 1 as no, t_auto.* -> from (select @no := 0) as dmy, t_auto -> order by id desc; +------+----+--------+ | no | id | val | +------+----+--------+ | 1 | 5 | test-a | | 2 | 4 | test4 | | 3 | 2 | test2 | | 4 | 1 | test1 | +------+----+--------+ 4 rows in set (0.00 sec)
PR
コメント