我在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
Run Code Online (Sandbox Code Playgroud)
如您所见,我们可以假设我们为Items模型提供get_items方法,该模型接收2个参数$ page_no和10(如此处所示).我知道10是要获取的项目数,$ page_no是从offset开始的页面
我可以为10参数实现一个限制sql语句,但是什么sql语句将对应于$ page_no?Kohana对"从偏移开始的页面"的意思是什么
And*_*ore 14
它对应于一个LIMIT声明:
SELECT something FROM table LIMIT $limit OFFSET $offset;
//or alternatively
SELECT something FROM table LIMIT $offset,$limit;
Run Code Online (Sandbox Code Playgroud)
换句话说,从表中选择一些东西,但只给我$limit从记录开始的记录$offset.
$offset = ($page_no - 1) * $limit
$page_no 是1基于.
MySQL文档中的更多信息:
DISCLAMER: $limit而$offset在这个问题只用来帮助理解.当然,如果没有正确的值转义,您不希望构建查询.
不幸的是,该特定评论混淆了两种常见的方式来考虑分页或分组查询.正如Andrew所描述的,SELECT语法允许OFFSET参数,即在返回任何内容之前跳过的项目数.但是,它通常与分页一起使用,就像在您的引文中引用的分页库一样.在这种情况下,询问特定页码更有用.
要比较这两者,请考虑一个您已进行搜索并已转到第3页的情况,每页有10个项目.第1-20项是前两页; 因此,OFFSET参数将为20:
SELECT * FROM table WHERE searched LIMIT 10 OFFSET 20
Run Code Online (Sandbox Code Playgroud)
要么
SELECT * FROM table WHERE searched LIMIT 20,10
Run Code Online (Sandbox Code Playgroud)
不幸的是,$page_no引用示例中的参数可能希望是3,即页码.在这种情况下,必须计算SQL偏移量.鉴于这get_items似乎不是一个标准的模型方法,它可能在那里计算; 或者,分页库似乎有一个属性sql_offset,可能会为你计算它.无论哪种方式,计算都很容易:
$offset = max($page_no - 1, 0) * $limit;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27624 次 |
| 最近记录: |