我正在编写一个web应用程序,它应该在搜索查询中显示非常大的结果。 说一些查询将返回10.000项。 我想将这些显示给用户分页;到目前为止没有问题:每个页面将是带有适当的LIMIT语句的查询的结果。 但我想在分页查询的每个页面中显示结果的线索:来自第一个项目的一些数据和来自最后一个的一些数据。 这意味着,例如,与10.000项目的结果和50项的页面大小,如果用户要求的第一页,我将需要:sql查询得到一个不连续的结果子集
- 第50项(被请求的页面用户)
- 项目51和100(第一和最后的第二页的)
- 项目101和151
等
对于我想避免一个查询磷效率的原因呃排。
[编辑]我也宁愿不下载10.000的结果,如果我只需要50 +五十零分之万* 2 = 400
的问题是:是否有一个查询我可以发出到RDBMS(MySQL的,顺便说一下,但我更喜欢cross-db解决方案),它只会返回我需要的数据?
我不能使用服务器端游标,因为并不是所有的dbs都支持它,我希望我的应用程序可以与数据库无关。
对不起,误解你的问题(早晨咖啡还在酝酿之中)。我会调整我的答案。 – 2010-02-17 11:36:34
好点:这将最大限度地减少对使用的数据库的依赖:只有限制语法将不得不进行调整。 分页逻辑需要非标准功能。每当我偶然发现这一点,我真的很惊讶:这样一个基本的构造怎么能不被标准化呢? – silviot 2010-02-17 13:20:41
这里的问题是查询不能被参数化。如果我想要100页的话呢?或者如果我想要第100页以及上一页和下一页?然后你必须立即创建SQL。 – 2010-02-17 13:25:39