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 には無いとですたい。
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)