我有一个包含这些列的表
|Name|Quantity|Unit
我想根据测量单位按降序排列数据,例如:
|Bread|1.2|Kg
|Pasta|600.21|g
|Flour|200.18|g
|Salt|70.12|mg
|Pepper|60.3|mg
|Venom|700.15|mcg
1.2小于600.21但单位为Kg,因此按照比例Kg > g > mg >mcg等顺序优先级在前(假设表格不包含 6000g,因为符号为 6Kg)
这段代码显然不起作用
public Cursor allDataSorted() {
try {
Cursor c = mDb.rawQuery(
"SELECT * FROM myTable order by Quantity desc", null);
if (c != null) {
c.moveToNext();
}
return c;
} catch (SQLException mSQLException) {
Log.e(TAG, "allDataSorted>>" + mSQLException.toString());
throw mSQLException;
}
}
}
我表中的所有数据都是文本字符串,例如956在99之后错误地显示,所以我不知道如何解决这个问题,结果完全没有排序。
有什么建议吗?
注意
我无法转换和重新转换表格,这些表格太大了,而且适配器用于太多种类的单位,只能使用一般的基本单位。
编辑
按照 Ryan Griggs 的建议,我在同一个数据库文件中包含了 mapperTb表
Unit|Multipler
hg|100
g|1
dg|0.1
cg|0.01
mg|0.001
mcg|0.000001
我已经以这种方式编辑了 allDataSorted() 方法:
public Cursor allDataSorted() {
try {
Cursor c = mDb.rawQuery("SELECT *, (CAST(myTable.Quantity as FLOAT) * mapperTb.Multipler) as Quantity FROM myTable INNER JOIN mapperTb ON myTable.Unit = mapperTb.Unit ORDER BY Quantity desc", null);
if (c != null) {
c.moveToNext();
}
return c;
} catch (SQLException mSQLException) {
Log.e(TAG, "allDataSorted>>" + mSQLException.toString());
throw mSQLException;
}
}
}
但不起作用并且光标结果为空