[Senna-dev 814] Re: SennaQL 多重sortについて

Back to archive index

morit****@razil***** morit****@razil*****
2008年 3月 17日 (月) 16:52:48 JST


森です。

>>> 渡部 浩二 さんは書きました:
> 渡部です。
> 
> SennaQLで複数のフィールドに対してsortのかけ方が分かりません。
> 
> (sen-output (((<senna_test>.field_a : "test")::sort field_a 100 :asc)::sort field_b 100 :asc) '(.:key :field_a :field_b))
> 
> とした場合、最後のfield_bでソートされるのみで、field_aのソートが反映されません。

そうですね。この例ですと

 (<senna_test>.field_a : "test")

で返されるレコードセットを、field_aでソートし、
それから field_bでソートしなおしていることになりますので、
最後のソート条件だけが有効になります。

> SennaQLでの多重ソートは可能なのでしょうか。

すみません。実はまだ作っていなかったのですが、
rev769で比較関数をsortの引数に指定できるようにしてみました。

(sen-output
 (((<senna_test>.field_a : "test") ::sort '(()) 100 :asc
   (lambda (x y)
     (if (= x.field_a y.field_a)
         (- x.field_b y.field_b)
         (- x.field_a y.field_a)))))
 '(.:key :field_a :field_b))

組み込みの比較関数が貧弱なのでまだ実用性は低いかも知れませんが。。

> 分かる方いらっしゃいましたら、宜しくお願いします。
> 
> _______________________________________________
> Senna-dev mailing list
> Senna****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/senna-dev
> バグ報告方法:http://qwik.jp/senna/bug_report.html
> 
--
morita




Senna-dev メーリングリストの案内
Back to archive index