back

データベース検索の基本 (4/5)

■limitとoffset

findによる検索は、特に指定をしなければ、検索されたエンティティすべてが返されます。が、多量のデータを扱うようになると、「全部まとめて取り出す」というのが大変になってきます。必要に応じて、必要な部分のデータだけを取り出す、という方法を覚えておかないといけません。

これを行うのが「offset」と「limit」です。これらについて簡単にまとめましょう。

●「○○番目」からデータを取り出す「offset」
《Query》->offset( 整数 );
検索したデータの最初からではなく、指定した位置からデータを取り出すためのものです。引数に、取り出す位置を示す値を渡すことで、その場所からデータを取り出します。この場所を示す値は、一番最初が「ゼロ」、2番目が1,3番目が2となります。「10番目のものから取り出したい」というなら、引数は「9」になります。

●指定した数だけデータを取り出す「limit」
《Query》->limit( 整数 );
取り出すデータの数を引数で指定します。引数を「10」とすれば、10個のデータを取り出します。ただし、これは「最大数」と考えて下さい。例えば、取り出すデータ全体が5つしかなければ、limit(10)と指定しても得られるデータは5つだけです。

では、先ほどのサンプルを書き換えて、修正意してみましょう。


では、利用例を下にあげておきましょう。例によってフィールドに検索テキストを書いて送信すると、「Find Persons」のタイトルの下に「○○is first data.」というように最初のデータのnameを表示します。そして下のテーブルには、2番目以降のデータを最大3つまで表示します。



(by. SYODA-Tuyano.)

※リストが表示されない場合

AddBlockなどの広告ブロックツールがONになっているとリストなどが表示されない場合があります。これらのツールをOFFにしてみてください。

public function find() {
    $this->set('msg', null);
    if ($this->request->is('post')) {
        $find = $this->request->data['find'];
        $first = $this->Persons->find()
            ->limit(1)
            ->where(["name like " => '%' . $find . '%']);
        $persons = $this->Persons->find()
            ->offset(1)
            ->limit(3)
            ->where(["name like " => '%' . $find . '%']);
        $this->set('msg', $first->first()->name . ' is first data.');
    } else {
        $persons = [];
    }
    $this->set('persons', $persons);
}




   

記事のリストに戻る



PC Site G+ mail