我在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参数实现一个限制sql语句,但是什么sql语句对应于$ page_no? Kohana对“从偏移处开始的页面”的意思是什么
答案 0 :(得分:12)
它对应于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文档中的更多信息:
DISCLAMER: $limit
和$offset
仅用于帮助理解。当然,如果没有正确的值转义,您不希望构建查询。
答案 1 :(得分:5)
遗憾的是,该特定评论混淆了两种在查询中考虑分页或分组的常用方法。正如Andrew描述的那样,SELECT语法允许OFFSET parameter,在返回任何内容之前跳过的项目数。但是,它通常与分页一起使用,例如在引用您的引文的pagination library中。在这种情况下,请求特定的页码更有用。
要比较这两者,请考虑一个您已进行搜索并已转到第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;