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

如您所见,我们可以假设我们有用于 Items 模型的 get_items 方法,它接收 2 个参数,$page_no 和 10(如图所示)。我知道 10 是要获取的项目数, $page_no 是从偏移量开始的页面

我大概可以为10个参数实现一个limit sql语句,但是$page_no会对应什么sql语句呢?Kohana 关于“从偏移量开始的页面”是什么意思

4

2 回答 2

17

它对应于一个LIMIT语句:

SELECT something FROM table LIMIT $limit OFFSET $offset;

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

换句话说,从表中选择一些东西,但只给我$limit从记录开始的记录$offset

$offset = ($page_no - 1) * $limit
$page_no是基于 1 的。

MySQL 文档中的更多信息:

12.2.8 选择语法

免责声明: $limit并且$offset在此问题中仅用于帮助理解。当然,您不希望在没有正确转义值的情况下构建查询。

于 2009-07-29T01:15:50.460 回答
6

不幸的是,该特定评论混淆了在查询中考虑分页或分组的两种常见方法。正如 Andrew 所描述的,SELECT 语法允许使用OFFSET 参数,即在返回任何内容之前要跳过的项目数。但是,它最常与分页一起使用,例如在引用您的引文的分页库中。在这种情况下,询问特定的页码会更有用。

要比较这两者,请考虑您进行了搜索并转到第 3 页的情况,每页有 10 个项目。第 1-20 项在前两页;因此,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 回答