mysql:8898
From: 班石悦夫 <班石悦夫 <madara@xxxxxxxxxx>>
Date: Wed, 03 Mar 2004 12:35:33 +0900
Subject: [mysql 08898] Re: 整数フィールドの次の空きを探す sql は
班石です > しかし、一番いいのは「番号を使い切ることに意味は無い」と言い張ることで > しょうね。 そうですけど、桁数を増やすことが出来ない、またはコストが高い場合は 難しいですね。 実際にデータを入れて実行してみました。 mysql> create table table2(a int); Query OK, 0 rows affected (0.00 sec) mysql> insert table2 values(1),(3),(4),(5),(8),(9); Query OK, 6 rows affected (0.00 sec) Records: 6 Duplicates: 0 Warnings: 0 mysql> select @i:=2,@x:=@i,@z:=@i; +-------+--------+--------+ | @i:=2 | @x:=@i | @z:=@i | +-------+--------+--------+ | 2 | 2 | 2 | +-------+--------+--------+ 1 row in set (0.00 sec) mysql> select a,@x:=@x+1,if(a<>@x and @z=@i,@z:=@x,null) from table2 where a>@i order by a; +------+----------+---------------------------------+ | a | @x:=@x+1 | if(a<>@x and @z=@i,@z:=@x,null) | +------+----------+---------------------------------+ | 3 | 3 | NULL | | 4 | 4 | NULL | | 5 | 5 | NULL | | 8 | 6 | 6 | | 9 | 7 | NULL | +------+----------+---------------------------------+ 5 rows in set (0.00 sec) mysql> select if(@z<>@i,@z,if(@x=@i,null,@x+1)); +-----------------------------------+ | if(@z<>@i,@z,if(@x=@i,null,@x+1)) | +-----------------------------------+ | 6 | +-----------------------------------+ @i:=2の箇所で基準値を入れて下さい。 >昇順では2ならば6、 >6ならば7、7ならば10をみつけるもの。降順では10ならば7、 >7ならば6、6ならば2、2ならば0、0ならば該当なし、 はうまくいきました。
8880 2004-03-02 15:16 [柴垣 顕郎 <akiro@xx] 整数フィールドの次の空きを探す sql は 8882 2004-03-02 15:59 ┣[KAWAJI Shinya <kawaj] 8883 2004-03-02 16:04 ┃┗[KAWAJI Shinya <kawaj] 8888 2004-03-02 20:50 ┃ ┗[柴垣 <akiro@xxxxxxxx] 8889 2004-03-02 23:40 ┃ ┗[ML account <ml@xxxxx] 8890 2004-03-03 08:47 ┃ ┗[KAWAJI Shinya <kawaj] 8894 2004-03-03 09:28 ┃ ┣[柴垣 <akiro@xxxxxxxx] 8899 2004-03-03 12:54 ┃ ┃┗[Seiji Uramoto <uramo] 8895 2004-03-03 10:11 ┃ ┣[ML account <ml@xxxxx] -> 8898 2004-03-03 12:35 ┃ ┗[班石悦夫 <madara@xxx] 8900 2004-03-03 14:44 ┃ ┗[ML account <ml@xxxxx] 8885 2004-03-02 16:19 ┣[ML account <ml@xxxxx] 8886 2004-03-02 18:48 ┗[班石悦夫 <madara@xxx]