SQLiteDatabase.Query方法中的多个OrderBy

时间:2012-09-09 12:38:19

标签: android sqlite sql-order-by

我正在使用SQLiteDatabase的查询方法。我需要有关此方法的 orderBy 参数的帮助。

Cursor cursor = sqLiteDatabase.query(tableName, tableColumns, whereClause, whereArgs, groupBy, having, orderBy);

public Cursor getAllCustomexp(int TID) throws SQLException 
{
    Cursor mCursor =
            db.query(false, CEXP_TABLE, new String[] {KEY_CEID, FLD_CETID, FLD_CEEID, FLD_CEMID,
            FLD_CEAMT, FLD_CESEL}, FLD_CETID + " = " + TID, null,
            null, null, FLD_CEEID, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}

问题1: 在上面的查询中,结果集将按FLD_CEEID按升序或降序排序?

问题2: 如果我需要先按FLD_CEEID然后按FLD_CEMID订购结果集,我应该如何按此查询的参数构建订单。

使用此方法可以执行多个订单吗?

2 个答案:

答案 0 :(得分:5)

来自SQLite docs

  

如果返回多行的SELECT语句没有   ORDER BY子句,返回行的顺序是   未定义。或者,如果SELECT语句确实具有ORDER BY子句,   然后附加到ORDER BY的表达式列表确定   将行返回给用户的顺序。行首先排序   基于评估最左侧表达式的结果   ORDER BY列表,然后通过评估第二个最左边来打破关系   表达等。所有ORDER的两行的顺序   返回的BY表达式求值等值是未定义的。   每个ORDER BY表达式可以可选地后跟一个   关键字ASC(首先返回较小的值)或DESC(较大的值)   值首先返回)。如果既未指定ASC或DESC,则为行   默认情况下按升序排序(较小的值为先)。

答案1:结果集将按升序排序。

答案2:

String orderBy = FLD_CEEID + " ASC, " + FLD_CEMID + " ASC";
db.query(false, CEXP_TABLE, new String[] {KEY_CEID, FLD_CETID, FLD_CEEID, FLD_CEMID,
        FLD_CEAMT, FLD_CESEL}, FLD_CETID + " = " + TID, null,
        null, null, orderBy, null);

答案 1 :(得分:0)

就像在SQL Select Order By中一样。您可以在此处找到详细信息:http://en.wikipedia.org/wiki/Order_by_(SQL)。

相关问题