2016-05-23 63 views
0

我遇到了一個問題,訂購了我通過ORMLite查詢的對象列表,我想通過2個單獨的列進行排序。我想以優先級最低和計數最高的順序排列。但是,好像查詢只接受最後一個orderBy而不是兩個。例如這裏有兩個查詢及其結果:ORMLite orderBy多列不工作

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,... 

第二個代碼塊:

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... 

注意t之間的唯一區別我查詢的訂單是orderBys。然而,他們給了我2個不同的有序集。

回答

0

您的第一個查詢(queryBuilder4)以後代的方式命令FACE_COUNT_COLUMN_NAME的結果(如果存在相同的值,在本例中爲「count = 3」),查詢將使用PRIORITY_COLUMN_NAME在「上升的方式。

第二個查詢(queryBuilder5)以PRIORITY_COLUMN_NAME順序排列結果,但在「priority」中不存在相同的值,因此「FACE_COUNT_COLUMN_NAME的排序」被忽略,結果與第一個不同查詢。

+0

OH!我明白。非常感謝你 – Jeff

0

注意兩個查詢之間的唯一區別是我放置orderBys的順序。然而,他們給了我2個不同的有序集。

沒錯。這是預期的行爲。在SQL中,ORDER BY子句按特定順序處理。重點引用QueryBuilder.orderby(...) javadocs

將「ORDER BY」子句添加到SQL查詢語句中。這可以被多次調用以添加額外的「ORDER BY」子句。 之前的一個是先應用

因此,在第一種情況下,FACE_COUNT_COLUMN_NAME是先下降。如果計數相等,則PRIORITY_COLUMN_NAME按照升序排列。在第二種情況下,優先順序是首先按順序升序排列。如果優先級相同,則計數按降序排列。