Я использую это:
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
Таблица Azure PHP сначала извлекает последние данные с помощью нумерации страниц ⇐ Php
Кемеровские программисты php общаются здесь
1764326303
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];
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79832473/azure-table-php-retrieve-latest-data-first-with-pagination[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия