我有一个HTTP客户端,希望仅在查询字符串中发送一个偏移量来处理分页,例如http://foo.com/cars?offset=50
。
作为回应,他们得到了一个模型,该模型具有项目总数和数据数组。 {"totalitemcount":100, "data":[{"id":1,"name":"Porsche"},{"id":2, "name":"Ferrari"}]}
我用来执行此操作的SQL如下:
select count(items.id) over() as totalitemcount, items.* from (
select * from cars
order by id
) as items
limit 20
offset 50
我不确定这种方法的效果如何,并想知道上述约束是否可以进行更改以改进它?
答案 0 :(得分:0)
执行此操作的最佳方法是先这样查询:
SELECT * FROM cars
ORDER BY id
LIMIT 20;
然后记住 last id
。
使用
检索下一页
SELECT * FROM cars
WHERE id > [the id you remembered]
ORDER BY id
LIMIT 20;
以此类推。
这样一来,您无法获得结果的总数,但是却可以提高效率。
您真的需要确切的总数吗?如果近似值足够,请尝试在this blog post末尾提出想法。