- ベストアンサー
レコードの抽出
PerlCGIでSQL-ENGINE.plというライブラリを使ってSQLを実行しています。最も結構ローカルなフリーのライブラリだから(作った人におこられるか)それの使い方を教えてくださいという訳ではありません。 一般的な形で結構ですので、SQL文を教えてもらいたいのです。 例えば select * from テーブル where 抽出条件 order by 何かの基準で降順並替え; として、さらにこの抽出結果の上から11番目のレコードから20番目のレコードだけを抽出したいとすると、これにどのようなSQL文を追加したらよいのでしょう。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
察するにページ切り替え方式の一覧表示をしたいのだろう(1ページあたり10件の)。 残念な事にこれはとても難しい。SQLで解決する話ではない。大抵がDB独自の方法になるからだ。 なので、selectした後で、10件読み飛ばした後表示するという方法が見易い。実際は、(現在ページ数-1)×10件を読み飛ばす事になるのだろうな。 ページ数を算出するのに総レコード数も要る事だし、泥臭いがこんな処理を行う方が良いのではないかな。どうせクライアントには分からない。
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
SQLで一発でうまくやるのはできないか、サーバー依存だと思います。 結果をプログラムでスキップするのも1つの方法ですが、 検索結果を保存しておくテーブルを用意しておいて 検索を識別するコードと一連番号を付与して インサートすることで、 検索識別コードと一連番号のBETWEENで取り出しできると思います。 検索結果が大量になる場合 そういう方法もありかなということで。
お礼
おかげさまで#1の方の言われた通りに表示ページ該当するレコード以外は空回しプログラムをつくりました。 >検索結果を保存しておくテーブルを用意しておいて なるほど、2次元配列でテーブルつくってメモリに読み込んでおいてBetweenで取り出すのですね、その方が大量データだとパフォーマンスが良いように思いますね。・・・でも取りあえず今作ったのが動くから今回はそれでやります。この課題は又の機会にやってみます。 ありがとうございました。
お礼
>察するにページ切り替え方式の一覧表示をしたいのだろう お察しの通りです。 >泥臭いがこんな処理を行う方が良いのではないかな。 判りました。whileでEOFまでとにかく回しながら、変数カウンターも回して表示させたいカウンター範囲のみHTMLを吐き出させて、後は空回しという方法でやってみます。 ありがとうございました。
補足
ふ~っ・・・おかげさまで言われた通りに表示ページ以外に該当するレコード以外は空回しプログラム完成しました。ありがとうございました。