我有一个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年。
任何输入?
答案 0 :(得分:0)
当您执行“ORDER BY类型”时,您告诉SQlite返回类型为1的所有行,然后返回类型为2的所有行。在这两个组中的每个组中,您都没有指定任何顺序,意味着订单未定义。
来自SQLite规范:
“如果返回多行的SELECT语句没有ORDER BY子句,则返回行的顺序是未定义的”
当然,你有一个ORDER BY子句,但只有一个级别,所以一旦项目按类型分组,内部顺序将是未定义的。
由于您依赖于在指定订单之前使用的隐式未定义订单,因此我不知道有任何方法可以实现您的需求。
为什么你需要这个看似随机的顺序的物品?