• ベストアンサー

レコードの抽出

PerlCGIでSQL-ENGINE.plというライブラリを使ってSQLを実行しています。最も結構ローカルなフリーのライブラリだから(作った人におこられるか)それの使い方を教えてくださいという訳ではありません。 一般的な形で結構ですので、SQL文を教えてもらいたいのです。 例えば select * from テーブル where 抽出条件 order by 何かの基準で降順並替え; として、さらにこの抽出結果の上から11番目のレコードから20番目のレコードだけを抽出したいとすると、これにどのようなSQL文を追加したらよいのでしょう。

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 察するにページ切り替え方式の一覧表示をしたいのだろう(1ページあたり10件の)。  残念な事にこれはとても難しい。SQLで解決する話ではない。大抵がDB独自の方法になるからだ。  なので、selectした後で、10件読み飛ばした後表示するという方法が見易い。実際は、(現在ページ数-1)×10件を読み飛ばす事になるのだろうな。  ページ数を算出するのに総レコード数も要る事だし、泥臭いがこんな処理を行う方が良いのではないかな。どうせクライアントには分からない。

souta_n
質問者

お礼

>察するにページ切り替え方式の一覧表示をしたいのだろう お察しの通りです。 >泥臭いがこんな処理を行う方が良いのではないかな。 判りました。whileでEOFまでとにかく回しながら、変数カウンターも回して表示させたいカウンター範囲のみHTMLを吐き出させて、後は空回しという方法でやってみます。 ありがとうございました。

souta_n
質問者

補足

ふ~っ・・・おかげさまで言われた通りに表示ページ以外に該当するレコード以外は空回しプログラム完成しました。ありがとうございました。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

SQLで一発でうまくやるのはできないか、サーバー依存だと思います。 結果をプログラムでスキップするのも1つの方法ですが、 検索結果を保存しておくテーブルを用意しておいて 検索を識別するコードと一連番号を付与して インサートすることで、 検索識別コードと一連番号のBETWEENで取り出しできると思います。 検索結果が大量になる場合 そういう方法もありかなということで。

souta_n
質問者

お礼

おかげさまで#1の方の言われた通りに表示ページ該当するレコード以外は空回しプログラムをつくりました。 >検索結果を保存しておくテーブルを用意しておいて なるほど、2次元配列でテーブルつくってメモリに読み込んでおいてBetweenで取り出すのですね、その方が大量データだとパフォーマンスが良いように思いますね。・・・でも取りあえず今作ったのが動くから今回はそれでやります。この課題は又の機会にやってみます。 ありがとうございました。

関連するQ&A