« FirebirdでLIMIT | トップページ | 古いパソコンでも軽快 »

2010-05-04

SELECT時に連番を付ける

SELECT (SELECT COUNT(T2.ID) + 1 FROM TEST AS T2 WHERE T2.ID < T1.ID) AS NUM, T1.ID, T1.NAME FROM TEST AS T1 ORDER BY T1.ID

で、NUMとして連番がつく。

IDの降順に対して昇順の連番をつけるには、

SELECT (SELECT COUNT(T2.ID) + 1 FROM TEST AS T2 WHERE T1.ID < T2.ID) AS NUM, T1.ID, T1.NAME FROM TEST AS T1 ORDER BY T1.ID DESC
のように、第1フィールドのSELECTの条件を逆にして、全体のORDER BYにDESCを付けてやる。

CGIなどで、ページ当たりn行を出力するためには、これをVIEWなどにしておくと、レコード削除などで、IDが連番になっておらず、虫食い状態になっていても、取得することができる。

Firebirdならこんな感じだと思う。

SELECT FIRST 20 NUM, ID, NAME FROM VIEW1 WHERE NUM > 20 * 2 ORDER BY ID;
1ページ当たり20行で1ページ目をページ数0とした時の3ページ目の分のレコードを抽出する。 NUMが41から60までのレコードとなる。

ただ、条件を設定した時には、NUMも虫食いになってしまうので使えない。



|

« FirebirdでLIMIT | トップページ | 古いパソコンでも軽快 »

データベース」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: SELECT時に連番を付ける:

« FirebirdでLIMIT | トップページ | 古いパソコンでも軽快 »