10

Kohanaのドキュメントでこれを見ました:

$content = new View('pages/items');
$items = new Items_Model;

$content->items = $items->get_items($page_no, 10); // page to get starting at offset, number of items to get

ご覧のとおり、$page_no と 10 の 2 つのパラメーターを受け取る Items モデルの get_items メソッドがあると想定できます (ここに示すように)。10 は取得するアイテムの数であり、 $page_no はオフセットから開始するページであることを知っています

おそらく、10 パラメータに対して limit sql ステートメントを実装できますが、$page_no に対応する sql ステートメントはどれでしょうか? 「オフセットから開始するページ」に関してコハナはどういう意味ですか

4

2 に答える 2

17

LIMITこれは次のステートメントに対応します。

SELECT something FROM table LIMIT $limit OFFSET $offset;

//or alternatively
SELECT something FROM table LIMIT $offset,$limit;

$limitつまり、 table から何かを選択しますが、 record から始まるレコードのみを提供します$offset

$offset = ($page_no - 1) * $limit
$page_no1ベースです。

詳細については、MySQL のドキュメントを参照してください。

12.2.8 SELECT構文

免責事項: $limitこの質問で$offsetは、理解を助けるためにのみ使用されています。もちろん、適切な値のエスケープなしでクエリを作成したくはありません。

于 2009-07-29T01:15:50.460 に答える
6

残念ながら、その特定のコメントは、クエリでページネーションまたはグループ化を検討する 2 つの一般的な方法を混同しています。Andrew が説明するように、SELECT 構文では、何かを返す前にスキップするアイテムの数であるOFFSET パラメータを使用できます。ただし、引用元のページネーション ライブラリのように、ページネーションと一緒に使用されることが最も多いです。この場合、特定のページ番号を尋ねる方が便利です。

2 つを比較するために、検索を行って 1 ページあたり 10 アイテムの 3 ページに移動した場合を考えてみましょう。項目 1 ~ 20 は最初の 2 ページにありました。したがって、OFFSET パラメータは 20 になります。

SELECT * FROM table WHERE searched LIMIT 10 OFFSET 20

また

SELECT * FROM table WHERE searched LIMIT 20,10

残念ながら、$page_no引用された例のパラメーターは、おそらくページ番号である 3 になりたいと考えています。その場合、SQL オフセットを計算する必要があります。get_itemsそれが標準モデルの方法ではないように思われることを考えると、おそらくそこで計算されます。あるいは、ページ付けライブラリには、sql_offsetおそらくそれを計算するというプロパティがあるようです。いずれにせよ、計算は非常に簡単です。

$offset = max($page_no - 1, 0) * $limit;
于 2009-07-29T01:40:41.897 に答える