数据存储
查询数据
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即是查询结果。