2013-09-23 77 views
0

我必须显示下面的查询结果,按优先级排序。Mysql:按两列排序

mysql> select CouponId, CouponCode, DateAdded, Priority from Coupon where IsFeatured=1 and IsApproved=1 order by DateAdded desc limit 12; 
+----------+--------------+---------------------+----------+ 
| CouponId | CouponCode | DateAdded   | Priority | 
+----------+--------------+---------------------+----------+ 
| 42699 | cc2   | 2013-09-12 14:54:39 |  NULL | 
| 42698 | c1   | 2013-09-12 14:53:36 |  NULL | 
| 42697 | cc2   | 2013-09-12 14:51:57 |  NULL | 
| 42679 | GLMR20  | 2013-05-14 13:21:07 |  5 | 
| 42678 | HKBAJAJ20 | 2013-05-14 12:35:31 |  1 | 
| 42677 | SIPPER51  | 2013-05-14 12:11:36 |  NULL | 
| 42654 | GL13MAYCHILL | 2013-05-14 07:09:08 |  7 | 
| 41978 | POLARSPL  | 2013-05-03 13:31:32 |  NULL | 
| 41958 | COMBO30  | 2013-05-03 12:16:53 |  NULL | 
| 41357 | BRANDED60 | 2013-04-25 13:49:56 |  NULL | 
| 41073 | PKCCR500  | 2013-04-22 11:10:27 |  NULL | 
| 40794 | SWC15  | 2013-04-18 13:57:54 |  NULL | 
+----------+--------------+---------------------+----------+ 
12 rows in set (0.00 sec) 

我虽然按优先级递减另一种秩序会做,但它产生相同的结果

mysql> select CouponId, CouponCode, DateAdded, Priority from Coupon where IsFeatured=1 and IsApproved=1 order by DateAdded desc, Priority desc limit 12; 
+----------+--------------+---------------------+----------+ 
| CouponId | CouponCode | DateAdded   | Priority | 
+----------+--------------+---------------------+----------+ 
| 42699 | cc2   | 2013-09-12 14:54:39 |  NULL | 
| 42698 | c1   | 2013-09-12 14:53:36 |  NULL | 
| 42697 | cc2   | 2013-09-12 14:51:57 |  NULL | 
| 42679 | GLMR20  | 2013-05-14 13:21:07 |  5 | 
| 42678 | HKBAJAJ20 | 2013-05-14 12:35:31 |  1 | 
| 42677 | SIPPER51  | 2013-05-14 12:11:36 |  NULL | 
| 42654 | GL13MAYCHILL | 2013-05-14 07:09:08 |  7 | 
| 41978 | POLARSPL  | 2013-05-03 13:31:32 |  NULL | 
| 41958 | COMBO30  | 2013-05-03 12:16:53 |  NULL | 
| 41357 | BRANDED60 | 2013-04-25 13:49:56 |  NULL | 
| 41073 | PKCCR500  | 2013-04-22 11:10:27 |  NULL | 
| 40794 | SWC15  | 2013-04-18 13:57:54 |  NULL | 
+----------+--------------+---------------------+----------+ 
12 rows in set (0.00 sec) 

mysql> 

如何订购此查询按优先级的结果。所以具有优先级7的行出现在顶部,与DateAdded无关。我需要按查询中的DateAdded排序才能选择前12行的w.r.t时间,然后根据优先级对它们进行排序。这怎么可能 ?

回答

2
select CouponId, CouponCode, DateAdded, Priority 
from 
(
    select CouponId, CouponCode, DateAdded, Priority 
    from Coupon 
    where IsFeatured=1 
    and IsApproved=1 
    order by DateAdded desc 
    limit 12 
) x 
order by Priority desc 
+0

什么是 “X” 呢? –

+0

您需要使用别名命名子查询。我用'x'。 –

0

使用此查询到非空第一顺序(上架日期之后):

SELECT CouponId, CouponCode, DateAdded, Priority 
FROM Coupon WHERE (IsFeatured = 1) and (IsApproved = 1) 
ORDER BY DateAdded desc, Priority IS Null, Priority desc limit 12;