数据存储

查询数据

ACStoreScanner按Fluent模式的接口设计规范提供了访问AbleCloud数据存储服务的接口。下例是使用ACStoreScanner查询数据记录的示例,也是推荐开发者使用的方法。

// 查询条件
$filter1 = new ACStoreFilter('time', ACStoreFilter::$GreaterOrEqual, 12345670);
$filter2 = new ACStoreFilter('time', ACStoreFilter::$Less, 12345679);
// 创建ACStoreScanner对象,并设置查询条件。
// 参数$datasetName是要查熏的数据集的名字。
// 第二个参数是以键值对数组(关联数组)描述的查询数据集时所使用的分区键的值。如果数据集没有分区,则使用NULL。
$scanner = $store->scanExt($datasetName, array('deviceId' => 1));
// 设置条件,执行查询。
$rows = $scanner->select('deviceId', 'status')
    ->whereExt($filter1)
    ->andWhere($filter2)
    ->addOrderBy('time', true)
    ->addOrderBy('deviceId', false)
    ->groupBy('deviceId', 'status', 'time')
    ->limit(100)
    ->avg('status')
    ->execute();
// $rows即是查询结果。

为兼容早期版本的PHP SDK,ACStore仍旧提供scan方法用于查询数据记录,但已不推荐使用。下例是使用ACStore::scan方法对上例的等价实现。

// 创建ACStoreScanner对象,设置查询条件。
// 参数$datasetName是要查熏的数据集的名字。
// 第二个参数是以键值对数组(关联数组)描述的查询数据集时所使用的分区键的值。如果数据集没有分区,则使用NULL。
$scanner = new ACStoreScanner($datasetName, array('deviceId' => 1));
// 查询条件
$filter1 = new ACStoreFilter('time', ACStoreFilter::$GreaterOrEqual, 12345670);
$filter2 = new ACStoreFilter('time', ACStoreFilter::$Less, 12345679);
$complicatedFilter1 = new ACStoreComplicatedFilter($filter1);
$complicatedFilter2 = new ACStoreComplicatedFilter($filter2);
$complicatedFilter1->linkTo($complicatedFilter2, true);
// 准备查询
$scanner->select('deviceId', 'status');
$scanner->where($complicatedFilter1);
$scanner->addOrderBy('time', true);
$scanner->addOrderBy('deviceId', false);
$scanner->groupBy('deviceId', 'status', 'time');
$scanner->limit(100);
$scanner->avg('status');
// 实例化ACStore对象,执行查询。
$store = ACClient::getStore();
$storeIter = $store->scan($scanner);
$rows = $storeIter->next();     // $rows即是查询结果。