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

配列、マップ、またはそれに類似したものを返す関数を実行することは可能ですか?
そのような結果をどのように繰り返すことができますか?

ありがとう!

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 に答える