$filter = " ( redemption_code eq '1001') ";
$result = $tableRestProxy->queryEntities("Redemptions", $filter);
$entities = $result->getEntities();
foreach($entities as $entity){
}此Microsoft天蓝色存储查询工作完善,并可从赎回表中返回上千条记录。请你帮助我如何使用开始和限制参数在其中分页。
发布于 2016-04-18 03:19:54
您可以利用QueryEntitiesOptions进行查询和分页。通常,您可以使用setTop($top)从表中选择顶部(N)实体,然后利用下一个(N)实体的queryEntities()函数请求的_nextPartitionKey属性。
下面是代码片段:
$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 />";
}更新
经过一系列测试后,它将同时使用setFilter和setTop,如果过滤器字符串不是RowKey,我在$filter字符串中使用了一个自定义列,它工作得很好。但是,当我同时在$filter中使用$filter列和setTop函数时,它会引起您的问题。
我深入研究了源代码,发现$filter字符串没有设置到$queryParam at TableRestProxy.php第1008行,因为$filter字符串与_buildFilterExpressionRec()上的任何条件stsm不匹配。
因此,您可以尝试利用实例来设置筛选字符串。尝试使用以下代码:
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);发布于 2016-09-27 07:43:30
您可以看到如何在PHP中对Azure表存储进行查询和分页的演示
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;
}
} 示威情况如下:

https://stackoverflow.com/questions/36662491
复制相似问题