2016-05-23 12 views
0

2つの別々の列で注文したいORMLiteを使用してクエリを実行しているオブジェクトのリストを注文する際に問題があります。私は、優先度が最も低く、カウントが最高であることによって注文したい。しかし、クエリは、私が両方の代わりに設定した最後のorderByを受け入れるように見えます。例えば、ここでは2つのクエリとその結果である:ORMLite order複数の列が正しく動作しない

QueryBuilder<CategoryData, Integer> queryBuilder4 = dao.queryBuilder(); 
queryBuilder4.orderBy(CategoryData.FACE_COUNT_COLUMN_NAME, false); 
queryBuilder4.orderBy(CategoryData.PRIORITY_COLUMN_NAME, true); 
Log.d(TAG, "4 Query returns:"+ queryBuilder4.query().toString()); 

は、そして、それは出力です:

name=Blues, db=158, count=3, priority=1, firstLookDbID=6 
name=Greens, db=165, count=3, priority=8, firstLookDbID=9 
name=Blacks, db=157, count=1, priority=0, firstLookDbID=2,... 

2番目のコードブロック:

QueryBuilder<CategoryData, Integer> queryBuilder5 = dao.queryBuilder(); 
queryBuilder5.orderBy(CategoryData.PRIORITY_COLUMN_NAME, true); 
queryBuilder5.orderBy(CategoryData.FACE_COUNT_COLUMN_NAME, false); 
Log.d(TAG, "5 Query returns:"+ queryBuilder5.query().toString()); 

そして、それは出力です:

name=Blacks, db=157, count=1, priority=0, firstLookDbID=2 
name=Blues, db=158, count=3, priority=1, firstLookDbID=6 
... 
name=Greens, db=165, count=3, priority=8, firstLookDbID=9... 

唯一の違いは、私はorderBysを置く順序です。しかし、彼らは私に2つの異なる注文セットを与える。

答えて

0

最初のクエリ(queryBuilder4)はFACE_COUNT_COLUMN_NAMEによる結果を子孫的に並べ替えます。同じ値が存在する場合、この場合は「count = 3」、クエリはPRIORITY_COLUMN_NAMEを使用して結果を「priority」で並べ替えます。優越的な方法。

2番目のクエリ(queryBuilder5)はPRIORITY_COLUMN_NAMEの結果を昇順で並べ替えますが、同じ値が「優先度」に存在しないため、「FACE_COUNT_COLUMN_NAMEによる注文」は無視され、結果は最初のものとは異なりますクエリ。

+0

OH!わかりました。どうもありがとうございました – Jeff

0

2つのクエリの唯一の違いは、orderBysを置く順序です。しかし、彼らは私に2つの異なる注文セットを与える。

右。これは予想される動作です。 SQLでは、ORDER BY句は特定の順序で処理されます。 QueryBuilder.orderby(...) javadocsを重視して引用するには

SQLクエリ文に「ORDER BY」句を追加します。これは、追加の "ORDER BY"節を追加するために複数回呼び出すことができます。 以前のものが最初に適用されます

したがって、最初の例ではFACE_COUNT_COLUMN_NAMEが最初に降順に並べ替えられます。カウントが等しい場合、PRIORITY_COLUMN_NAMEは昇順に並べられます。第2の場合、優先度は最初に昇順に並べ替えられます。優先順位が等しい場合、カウントは降順に並べられます。

関連する問題