Таблица Azure PHP сначала извлекает последние данные с помощью нумерации страницPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Таблица Azure PHP сначала извлекает последние данные с помощью нумерации страниц

Сообщение Anonymous »

Я использую это:
https://github.com/Azure/azure-storage-table-php
для вставки данных в таблицу Azure.
Однако, когда я получаю данные, я не получаю последние записи, если не использую цикл do... while, как показано в разделе комментариев функции ниже.
Мой вопрос это:
Как получить последние данные при использовании нумерации страниц? Я хочу, чтобы самые новые записи всегда появлялись в списке первыми, а затем использовался токен продолжения для загрузки следующего набора результатов. Я не хочу использовать do.. while, поскольку он сразу получит все данные из таблицы Azure.
Я также реализовал эту функцию (invertedTicksRowKey), чтобы использовать значение в качестве rowKey:
function invertedTicksRowKey(): string
{
$now = new DateTime('now', new DateTimeZone('UTC'));
$ticks = ($now->format('U') * 10000000) + ($now->format('u') * 10) + 621355968000000000;
$inverted = 9223372036854775807 - $ticks;

$suffix = bin2hex(random_bytes(4)); // 8-char hex
return str_pad($inverted, 19, "0", STR_PAD_LEFT) . '-' . $suffix;
}

public function get_table_data(string $tableName, int $pageSize = 1000, ?TableContinuationToken $continuationToken = null, $filter = []): array
{

try {
$allData = [];
$token = $continuationToken;

//do {
$options = new QueryEntitiesOptions();
$options->setTop($pageSize);

// Build combined filter
$filters = [];
if (!empty($filter['date_range_filter'])) {
$filters[] = $filter['date_range_filter'];
}
if (!empty($filter['function'])) {
$filters[] = "PartitionKey eq '" . $filter['function'] . "'";
}

if ($filters) {
$filterString = implode(' and ', $filters);
$options->setFilter(Filter::applyQueryString($filterString));
}

if ($token) {
$options->setContinuationToken($token);
}

$result = $this->_tableClient->queryEntities($tableName, $options);
$token = $result->getContinuationToken();

$entities = $result->getEntities();

foreach ($entities as $entity) {
$row = [];
foreach ($entity->getProperties() as $key => $prop) {
$row[$key] = $prop->getValue();
}
$row['PartitionKey'] = $entity->getPartitionKey();
$row['RowKey'] = $entity->getRowKey();
$row['Timestamp'] = $entity->getTimestamp();
$allData[] = $row;
}

//} while ($token !== null);

// Sort newest first by RowKey (smallest = newest)
usort($allData, fn($a, $b) => strcmp($a['RowKey'], $b['RowKey']));

return [
'data' => $allData,
'continuationToken' => $token
];

} catch (\Exception $e) {
log_message('error', 'Azure Table query failed: ' . $e->getMessage());
return ['data' => [], 'continuationToken' => null];
}

}


Подробнее здесь: https://stackoverflow.com/questions/798 ... pagination
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»