[PHP-users 3101] Re: 件数制限

Tatsuro Nakagawa php-users@php.gr.jp
Wed, 24 Oct 2001 19:00:21 +0900


中川@magicです。

SQL文の話なので、あまり突っ込まない方が良いのかも知れませんが、一応、「PHP内でResultSet取るよりSQL文
でどうにかした方が効率はいいよ」というのもPHPでのコーディング上でぶち当たるであろう壁という判断で軽
く突っ込ましてもらいます。

--Reply-- reinaKITATANI <reina@axiv.com> --

> れいな@アクシブです。

> 本題に戻りますが、この件を実現するならやっぱりROWNUMを使う…のでしょうね。
> これで最初のページ分を取得して、取得したデータをnotか何かで省いて次の検索
> とかしちゃうんでしょうか?
> 
> 因みにORDERBYで順番を指定は出来たような気がします。<というかやってるけど間違ってるんでしょうか…
> 
>         $sql = "select * ";
>         $sql .= " from table ";
>         $sql .= " where (aaa = $a) and (rownum <100) ";
>         $sql .= " order by bbb desc
> 
> これでは次のページ分のデータの取得などはしてませんが…。
> でも間違っていたりして。。

間違えていないですよ。
ただ、開始位置を指定する場合は、rownum取った後にorder by かかっちゃうんで、思わしくない結果になって
いると思いますよ。
簡単なテーブルとデータ入れてやってみたらわかると思います。


例:

 元情報:1、2、3、4,5 -order by後→2、4,1、5、3
rownum:1、2、3、4、5                     1、2、3、4、5

この場合、rownum3以下を抽出したら・・・
2、1、3となり、3件しか取りたくないという場合にはまぁ、OKです。

でも、2以上、3以下と特定のデータを取りたい場合には、実際には2、3、4が欲しいところに4、1、5が
取り出されてしまいます。

#かなりわかりにくい説明ですね・・・

> #やっと教えてROM君じゃなくなったと思ったのにな。まだ未熟。

同じようなものです。
でも、積極性なくしては向上心も無くなると自分に言い聞かせて余計なお世話を焼いてます。

#そのせいで恥ずかしい思いしてばっかりですが。。。


--
Tatsuro Nakagawa