ORMLite orderBy 多列不起​​作用

ORMLite orderBy multiple columns not working

我在通过 ORMLite 查询要按 2 个单独的列排序的对象列表时遇到问题。我想按优先级最低和计数最高来排序。但是,查询似乎只接受我设置的最后一个 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...

请注意,这两个查询之间的唯一区别是我放置 orderBys 的顺序。但是他们给了我 2 个不同的有序集合。

您的第一个查询 (queryBuilder4) 按 FACE_COUNT_COLUMN_NAME 以后代方式对结果进行排序,如果存在相同的值,在本例中为“count = 3”,则查询使用 PRIORITY_COLUMN_NAME 来结果按“优先级”从小到大排序

第二个查询(queryBuilder5)按PRIORITY_COLUMN_NAME对结果进行升序排序,但在“priority”中不存在相同的值,因此"order by FACE_COUNT_COLUMN_NAME"被忽略并且结果与第一个查询不同。

Notice the only difference between the two queries is the order I put the orderBys. However they give me 2 different ordered sets.

对。这是预期的行为。在 SQL 中,ORDER BY 子句按特定顺序处理。重点引用 QueryBuilder.orderby(...) javadocs

Add "ORDER BY" clause to the SQL query statement. This can be called multiple times to add additional "ORDER BY" clauses. Ones earlier are applied first.

所以在第一个实例中,FACE_COUNT_COLUMN_NAME 首先降序排列。如果计数相等,则 PRIORITY_COLUMN_NAME 按升序排列。在第二种情况下,优先级首先按升序排列。如果优先级相等,则计数降序排列。