5

有没有一种有效的方法来对 SOQL 查询的结果进行分页,而不会将所有查询结果返回然后丢弃其中的大部分?

例如,我希望能够翻阅完整的联系人列表,一次显示 10 条记录。我不需要按任何特定字段进行排序。

4

2 回答 2

8

目前,我发现可以通过合作伙伴 API 处理任何 SOQL 查询的最有效的解决方案是保留从初始 QueryResult 返回的 sObjects 和查询定位器,以防在当前结果之外请求页面。

这需要在 Salesforce QueryResult 之上提供一定级别的分页支持。

即,当请求页面时,可能需要从以下位置获取 sObjects:

  • 当前(缓存的)QueryResult
  • 可以使用查询定位器获取的后续 QueryResult
  • 之前的 QueryResult
  • 三者的某种组合。

如果页面跨越两个(或更多)QueryResult,则需要创建一个包含所有必需记录的人工 QueryResult。

2012 年春季版更新

看起来有新功能将向 SOQL 添加 OFFSET 支持。例如

SELECT Name FROM Merchandise__c WHERE Price__c > 5.0 ORDER BY Name LIMIT 50 OFFSET 100

请参阅Spring '12 Force.com 平台发布 - SOQL 中添加的偏移量(试点)

2012 年夏季版更新

OFFSET 现在是 GA(一般可用性?)

于 2010-06-01T01:16:15.470 回答
2

您可以使用自动编号在服务器端进行分页。该字段可以在'order by'子句之后使用,它可以充当索引字段。

我已经像你一样做了分页。但我遇到了另一个问题,我不能同时在服务器端进行排序。因为排序和分页都需要在'order by'子句之后添加列。

于 2010-05-25T02:31:19.173 回答