2016-05-23 11 views
0

Ich habe ein Problem mit dem Bestellen einer Liste von Objekten, die ich durch ORMLite abfragen, wo ich durch 2 separate Spalten bestellen möchte. Ich möchte nach der Priorität sortieren, die die niedrigste und die Zählung die höchste ist. Es sieht jedoch so aus, als ob die Abfrage nur die letzte Reihenfolge akzeptiert, die ich an Stelle von beiden gesetzt habe. Zum Beispiel sind hier die zwei Abfragen und deren Ergebnisse:ORMLite orderBy mehrere Spalten nicht funktioniert

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()); 

Und es ist Ausgabe:

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

zweiten Codeblock:

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()); 

Und es ist Ausgabe:

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

Beachten Sie den einzigen Unterschied zwischen dem t Wo Anfragen ist die Reihenfolge, die ich die OrderBys. Allerdings geben sie mir 2 verschiedene geordnete Sets.

Antwort

0

Ihre erste Abfrage (queryBuilder4) ordnet das Ergebnis nach FACE_COUNT_COLUMN_NAME auf absteigende Weise an, wenn derselbe Wert existiert, in diesem Fall "count = 3", verwendet die Abfrage das PRIORITY_COLUMN_NAME, um das Ergebnis nach "priority" zu ordnen aufsteigender Weg.

Die zweite Abfrage (queryBuilder5) ordnet das Ergebnis durch PRIORITY_COLUMN_NAME in einer ascendent Weise, aber nicht existiert denselben Wert in „Priorität“, aus diesem Grunde der „Ordnung von FACE_COUNT_COLUMN_NAME“ ignoriert wird und das Ergebnis ist diferent zum ersten Abfrage.

+0

OH! Ich verstehe. Vielen Dank – Jeff

0

Beachten Sie, der einzige Unterschied zwischen den beiden Abfragen ist die Reihenfolge, die ich die OrderBys. Allerdings geben sie mir 2 verschiedene geordnete Sets.

Richtig. Dies ist das erwartete Verhalten. In SQL werden die ORDER BY-Klauseln in bestimmter Reihenfolge verarbeitet. Um die QueryBuilder.orderby(...) javadocs mit Betonung zu zitieren:

Hinzufügen "ORDER BY" -Klausel zu der SQL-Abfrage-Anweisung. Dies kann mehrmals aufgerufen werden, um zusätzliche "ORDER BY" -Klauseln hinzuzufügen. Eine frühere Version wird zuerst angewendet.

Also in erster Instanz wird die FACE_COUNT_COLUMN_NAME zuerst absteigend bestellt. Wenn die Anzahl gleich ist, wird die PRIORITY_COLUMN_NAME aufsteigend sortiert. In der zweiten wird die Priorität zuerst aufsteigend geordnet. Wenn die Priorität gleich ist, wird die Zählung absteigend sortiert.