混合排序顺序Android SQLite

时间:2015-02-26 08:38:51

标签: sqlite

我有一个Table ProductTable,其中的产品按3种类型列出

product_Name,product_Type和product_Year

假设我有10种产品

A - 2014 , 2015
B - 2014 , 2015
C - 2014 , 2015
D - 2014 , 2015
E - 2014 , 2015

Product A B C are of type 1 and D and E are of type 2

When i sort using year desc i get 2015 products and then 2014 products(expected behaviour)

when i sort using name and year desc i get A 2015, A2014, B2015, B2014 and so on (expected behaviour)

When i sort using type i get 
B 2014 ,
B 2015 ,
C 2014 ,
C 2015 ,
A 2014 ,
A 2015 ,
E 2014 ,
E 2015 ,
D 2014 ,
D 2015 .

我用于排序的查询是

SELECT * FROM Mytable WHERE productActive=? ORDER BY product_type

所需方案是我想要与上述订单相同(B,C,A,E,D),但2015年产品应该在2014年之前出现

eg.  B 2015 ,
B 2014 ,
C 2015 ,
C 2014 ,
A 2015 ,
A 2014 ,
E 2015 ,
E 2014 ,
D 2015 ,
D 2014 .

我试图按年份或名称使用组,但是没有给出期望的结果。

还尝试添加product_year DESC,但它首先提供所有2015年,然后是2014年。

任何输入?

1 个答案:

答案 0 :(得分:0)

当您执行“ORDER BY类型”时,您告诉SQlite返回类型为1的所有行,然后返回类型为2的所有行。在这两个组中的每个组中,您都没有指定任何顺序,意味着订单未定义。

来自SQLite规范:

“如果返回多行的SELECT语句没有ORDER BY子句,则返回行的顺序是未定义的”

当然,你有一个ORDER BY子句,但只有一个级别,所以一旦项目按类型分组,内部顺序将是未定义的。

由于您依赖于在指定订单之前使用的隐式未定义订单,因此我不知道有任何方法可以实现您的需求。

为什么你需要这个看似随机的顺序的物品?