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】 Unsupported on-disk structure for file xxx.fdb; found 32779, support @4?.@5?.(2014.02.18)
- データベースで検索に失敗する(2013.07.09)
- Firebird unsupported on-disk structure(2013.07.03)
- dbExpressでMySQLに接続 RAD Studio 2010(2012.01.25)
- Firebirdでテーブル一覧を得る(2011.10.06)
コメント