[前][次][番号順一覧][スレッド一覧]

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]