配送ドライバのリスト(古典的なflower shop scenario)を持つハッシュがあるとします。各ドライバには、評価とイベント信号URL(ESL)があります。私はそのリストの上位3人のドライバーだけにランキングでソートしてイベントを起こしたいと思っています。KRLのハッシュで「ORDER BY ... LIMIT ...」スタイルのクエリを実行する
SELECT esl FROM driver ORDER BY ranking LIMIT 3;
KRLでこれを行う方法があります:
リレーショナルデータベースと、私はこのようなクエリを実行するだろうか?
rule reset_counter {
select when rfq delivery_ready
noop();
always {
clear ent:loop_counter;
raise explicit event loop_drivers;
}
}
rule loop_on_drivers {
select when explicit loop_drivers
foreach app:drivers setting (driver)
pre {
esl = driver.pick("$.esl");
}
if (ent:loop_counter < 3) then {
// Signal the driver's ESL
}
always {
ent:loop_counter += 1 from 0;
}
}
:
- 秒は次のように解決できる
foreach
反復し
しかし、それは一種のクルージングです。それを行うにはもっとKRLの方法がありますか?注文の問題をどのように解決すればよいですか?
編集:ここで回答する質問を容易にするために、app:drivers
配列の形式です:
[
{
"id": "1",
"rating": "5",
"esl": "http://example.com/esl"
},
{
"id": "2",
"rating": "3",
"esl": "http://example.com/esl2"
}
]
これはソート機能には対応していますか? 'function(a、b){a.pick(" $ .. rating ")> b.pick(" $ .. rating "); } ' –
はい、ソート関数はあなたに望ましい結果を与えるはずです。 sort関数のバリエーションは 'sortedDrivers = app:drivers.sort(function(a、b){a {" rating "}} b {" rating "}}))' ' – edorcutt