首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Microsoft存储分页查询

Microsoft存储分页查询
EN

Stack Overflow用户
提问于 2016-04-16 09:35:08
回答 2查看 544关注 0票数 0
代码语言:javascript
复制
$filter = " ( redemption_code eq '1001')  ";    
$result = $tableRestProxy->queryEntities("Redemptions", $filter);
$entities = $result->getEntities();

foreach($entities as $entity){


}

此Microsoft天蓝色存储查询工作完善,并可从赎回表中返回上千条记录。请你帮助我如何使用开始和限制参数在其中分页。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-18 03:19:54

您可以利用QueryEntitiesOptions进行查询和分页。通常,您可以使用setTop($top)从表中选择顶部(N)实体,然后利用下一个(N)实体的queryEntities()函数请求的_nextPartitionKey属性。

下面是代码片段:

代码语言:javascript
复制
$tableRestProxy = ServicesBuilder::getInstance()->createTableService($connectionString);

$options = new QueryEntitiesOptions();
$filter = " ( redemption_code eq '1001') ";
$options->setFilter($filter);
$options->setTop(100);
try {
    $result = $tableRestProxy->queryEntities("Redemptions", $options);
} catch (ServiceException $e) {
    $code = $e->getCode();
    $error_message = $e->getMessage();
    echo $code . ": " . $error_message . "<br />";
}

//query next 100 entities
$nextRowKey = $result->getNextRowKey();
$nextPartitionKey = $result->getNextPartitionKey();
$options->setNextRowKey($nextRowKey);
$options->setNextPartitionKey($nextPartitionKey);
try {
    $next_result = $tableRestProxy->queryEntities("Redemptions", $options);
} catch (ServiceException $e) {
    $code = $e->getCode();
    $error_message = $e->getMessage();
    echo $code . ": " . $error_message . "<br />";
}

更新

经过一系列测试后,它将同时使用setFiltersetTop,如果过滤器字符串不是RowKey,我在$filter字符串中使用了一个自定义列,它工作得很好。但是,当我同时在$filter中使用$filter列和setTop函数时,它会引起您的问题。

我深入研究了源代码,发现$filter字符串没有设置到$queryParam at TableRestProxy.php第1008行,因为$filter字符串与_buildFilterExpressionRec()上的任何条件stsm不匹配。

因此,您可以尝试利用实例来设置筛选字符串。尝试使用以下代码:

代码语言:javascript
复制
use WindowsAzure\Table\Models\Filters\QueryStringFilter;
use WindowsAzure\Table\Models\QueryEntitiesOptions;
$options = new QueryEntitiesOptions();
$filter = new QueryStringFilter("(RowKey eq 'E1591D1')");
$options->setFilter($filter);
$options->setTop(5);
票数 0
EN

Stack Overflow用户

发布于 2016-09-27 07:43:30

您可以看到如何在PHP中对Azure表存储进行查询和分页的演示

代码语言:javascript
复制
function queryPaginationEntitiesSample($tableClient, $tableName, $numPerPage, $page, $filter) 
{ 
try { 
    $options = new QueryEntitiesOptions(); 
    $options->setFilter(Filter::applyQueryString($filter)); 
    if($page== 1){ 
        $options->setTop($numPerPage); 
        $result = $tableClient->queryEntities($tableName, $options); 
        $entities = $result->getEntities(); 
    } 
    else{ 
        //skip $numPerPage * ($page-1) records 
        $options->setTop($numPerPage * ($page-1)); 
        $options->setSelectFields(array('pk')); 
        $result = $tableClient->queryEntities($tableName, $options); 
        $nextRowKey = $result->getNextRowKey(); 
        $nextPartitionKey = $result->getNextPartitionKey(); 

        $options = new QueryEntitiesOptions(); 
        $options->setFilter(Filter::applyQueryString($filter)); 
        $options->setTop($numPerPage); 
        $options->setNextRowKey($nextRowKey); 
        $options->setNextPartitionKey($nextPartitionKey); 
        $result = $tableClient->queryEntities($tableName, $options); 
        $entities = $result->getEntities(); 
    } 

    return $entities; 
} 
catch(ServiceException $e){ 
    $code = $e->getCode(); 
    $error_message = $e->getMessage(); 
    echo $code.": ".$error_message.PHP_EOL; 
    return null; 
} 
} 

示威情况如下:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36662491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档