我在使用 android cursor、rawquery 和 group by 时遇到了问题。结果未排序。
这是表格:
public static final String I_ID = "iid";
public static final String I_QID = "qid";
public static final String I_STATUS = "status";
public static final String I_PDATE = "pub_date";
public static final String I_TYPE = "tipo";
public static final String I_TITLE = "titolo";
public static final String I_LINK = "link";
public static final String I_QR = "qrcode";
public static final String I_DESC = "descrizione";
private static final String C_ITEM_T =
"CREATE TABLE \""+T_ITEM+"\" ("+
"\""+I_ID+"\" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"+
"\""+I_QID+"\" INTEGER NOT NULL REFERENCES "+T_QUERY+"("+Q_ID+") ,"+
"\""+I_STATUS+"\" INTEGER NOT NULL,"+
"\""+I_PDATE+"\" TEXT NOT NULL,"+
"\""+I_TYPE+"\" TEXT NOT NULL,"+
"\""+I_TITLE+"\" TEXT NOT NULL,"+
"\""+I_LINK+"\" TEXT UNIQUE NOT NULL,"+
"\""+I_QR+"\" TEXT UNIQUE NOT NULL,"+
"\""+I_DESC+"\" TEXT"+
");";
public static final String A_ID = "aid";
public static final String A_IID = "iid";
public static final String A_SIZE = "grandezza";
public static final String A_DURATION = "durata";
public static final String A_CHANNELS = "canali";
public static final String A_RATE = "sampleRate";
public static final String A_TORRENT = "torrent";
public static final String A_DOWNLOAD = "download";
public static final String A_LICENSE_URL = "licenza_url";
public static final String A_TAGS = "tags";
public static final String A_CREATOR = "creatore";
private static final String C_ATTR_T =
"CREATE TABLE \""+T_ATTR+"\" ("+
"\""+A_ID+"\" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"+
"\""+A_IID+"\" INTEGER NOT NULL REFERENCES "+T_ITEM+"("+I_ID+") ,"+
"\""+A_SIZE+"\" LONG NOT NULL,"+
"\""+A_DURATION+"\" LONG NOT NULL,"+
"\""+A_CHANNELS+"\" TEXT NOT NULL,"+
"\""+A_RATE+"\" TEXT NOT NULL,"+
"\""+A_TORRENT+"\" TEXT NOT NULL,"+
"\""+A_DOWNLOAD+"\" TEXT NOT NULL,"+
"\""+A_LICENSE_URL+"\"TEXT,"+
"\""+A_TAGS+"\" TEXT,"+
"\""+A_CREATOR+"\" TEXT,"+
"UNIQUE ("+A_ID+","+A_IID+")"+
");";
这是我的查询:
public static final String FILL_GRID = "SELECT * "+
"FROM "+ Db.T_ITEM + " i " +
"LEFT OUTER JOIN "+Db.T_ATTR+" a ON ( i."+Db.I_ID+"=a."+Db.A_IID+ ")"+
" WHERE i."+Db.I_QID+" = ? AND i."+Db.I_STATUS+" <> "+Db.STATUS_DELETED +
" GROUP BY ? ";
以及我如何使用它:
Cursor c = db.rawQuery(FILL_GRID, new String[]{String.valueOf(qid), order});
我确定 qid 是一个整数,并订购 i.titolo ASC 或 DESC
对我有用的唯一解决方法是在 rawquery 调用方法中修改通过 clausole 移动组的查询:
public static final String FILL_GRID = "SELECT * "+
"FROM "+ Db.T_ITEM + " i " +
"LEFT OUTER JOIN "+Db.T_ATTR+" a ON ( i."+Db.I_ID+"=a."+Db.A_IID+ ")"+
" WHERE i."+Db.I_QID+" = ? AND i."+Db.I_STATUS+" <> "+Db.STATUS_DELETED;
Cursor c = db.rawQuery(FILL_GRID + " ORDER BY " + order, new String[]{String.valueOf(qid)});