3

我已经声明了一个存储客户数据的数据库:

type Customer = 
{
  name : string
  email: string
  cp: int
}

db /customer : Customer

我想执行某些查询来处理数据,例如:

Select name where id > <number>
Select * where cp IN(<number>, <number>)
Select * order by name

是否可以执行一个返回 Array、Map 或类似的函数来迭代它?
怎么能迭代出这样的结果?

谢谢!

4

1 回答 1

1

好的,从您的db声明开始,声明一个客户,而不是客户的集合,我相信这是您想要做的。我建议将其声明为从客户编号到客户数据的映射:

db /customer : intmap(Customer)

现在有了customers = /customer你就可以得到完整的客户集合,并对其进行任意处理。或者Db.intmap_fold_range,在集合中的一系列键上为您提供折叠功能;有了它,您可以轻松地将您的第一个查询编码为:

names_with_ids_gt(x) =
  get_names(names, id) = [/customer[id]/name | names]
  Db.intmap_fold_range(@/customer, get_names, [], x, none, (_ -> true))

当然,获取完整的客户集合并对其进行一些处理不会很有效。要获得更有效的解决方案,您将需要使用外部数据库及其查询功能。Opa 对这些的支持很快就会到来http ://blog.opalang.org/2011/11/opas-database-and-where-its-heading.html 。

于 2011-11-14T10:50:45.080 回答