SSブログ

MySQLで幸せ生活 [Linux]

最近ちょこちょこMySQLをいじる機会が多くて、いまさらながらMySQLの便利さを痛感。

PHP とかと連携してデータを表示する時とかは以下のように limit を多用します。
表とか作る時は便利です。

たとえば、1000件あるデータのうち、100件だけ表示したい場合
どうしますか?

$sql = "select data1, data2 from db";
$result  = mysql_query($sql);

$c = 0;
while ( $item = mysql_fetch_array($result)) {
  $c++;
  print "${item['data1']} , ${item['data2']} \n" ;
  if ( $c > 99 ) {
    break;
  }
}

こんな感じですかね?一般的なのは。

さて、表とかあるページにはよくありますよね?
「次の100件を表示」とかのボタン。
この場合、SQLの結果の101-200件目を取ってこなくてはいけない。

さて、どうしますか?

ぱっと思いつくのを考えると

$c = 0;
while ( $item = mysql_fetch_array($result)) {
  $c++;
  if ( $c > 100 ){
    print "${item['data1']} , ${item['data2']} \n" ;
  }
  if ( $c > 200 ) {
    break;
  }
}

こんな感じでしょうか。ちょっと雑な気がしますが・・・
無駄なloopしてるし。
if 文が必要になってきてめんどくさかったりします。

さて、ここで limit の登場です。
これはSQLの結果の件数を制限してくれるわけです。
101-200件目を表示したい場合は
「limit 101,100」 を追加してあげればいいだけです。
これは101件目から100件を表示するっていう意味です。

ですから

$sql = "select data1, data2 from db limit 101,100";
$result  = mysql_query($sql);

while ( $item = mysql_fetch_array($result)) {
  print "${item['data1']} , ${item['data2']} \n" ;
}

こんだけで済んじゃうんですよ!
件数を数える変数も使わなくて済むし、無駄な loop もしない。
すばらしい~。

limit に指定する数字を POST とかから拾ってくれば
「次の100件を表示」とかいう機能がかなりラクチンに作れます!

この limit は MySQL だけじゃなくて PostgreSQL にもあります。
Oracle や Sybase には無いとですたい。


nice!(0)  コメント(3)  トラックバック(1) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 3

三郎(同期)

Class::DBIとかを使うとより便利になるぞ。
あまりに楽すぎて、仕事してる気にはならないが。
$hash_ref=$class->retreive_from_sql('WHERE status='1' lmit ?, ? ' , $start, $end );

引数渡して、どんな形でも使えます。

では。
by 三郎(同期) (2004-12-19 22:07) 

三郎。【追記】

使い方間違えてたらごめん。
いつもうるおぼえで使ってるからね。。。
by 三郎。【追記】 (2004-12-19 22:10) 

まこっち

おー。なるほどね。
いろいろやりかたありそうね。
by まこっち (2004-12-21 02:04) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 1

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。