2012-03-26 9 views
2

配送ドライバのリスト(古典的な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; 
    } 
} 

  1. 秒は次のように解決できるforeach反復し

  • 回数を制限する方法をハッシュをソートする方法:2つの要件があります。

    しかし、それは一種のクルージングです。それを行うにはもっとKRLの方法がありますか?注文の問題をどのように解決すればよいですか?

    編集:ここで回答する質問を容易にするために、app:drivers配列の形式です:

    [ 
        { 
         "id": "1", 
         "rating": "5", 
         "esl": "http://example.com/esl" 
        }, 
        { 
         "id": "2", 
         "rating": "3", 
         "esl": "http://example.com/esl2" 
        } 
    ] 
    
  • 答えて

    2

    ハッシュの形式を知らなくても、それはあなたの特定の答えを与えることは不可能ですが、あなたが使用することができますソートオペレータソートし、その後、ピック演算子を使用するか、ハッシュ

    driver_data.sort(関数(){...})のようなもの( "$ ..何かの[:2]")選択します。

    「something」は、関連フィールドのハッシュからの名前です。

    +0

    これはソート機能には対応していますか? 'function(a、b){a.pick(" $ .. rating ")> b.pick(" $ .. rating "); } ' –

    +1

    はい、ソート関数はあなたに望ましい結果を与えるはずです。 sort関数のバリエーションは 'sortedDrivers = app:drivers.sort(function(a、b){a {" rating "}} b {" rating "}}))' ' – edorcutt

    関連する問題