【问题标题】:Mysql: ordering by two columnsMysql:按两列排序
【发布时间】:2013-09-23 09:22:12
【问题描述】:

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

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)

我虽然按 Priority desc 的另一个订单会这样做,但它会产生相同的结果

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 排序,只选择前 12 行 w.r.t time,然后根据 priority 对它们进行排序。这怎么可能?

【问题讨论】:

    标签: mysql sql two-columns


    【解决方案1】:
    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
    

    【讨论】:

    • 您需要使用别名命名子查询。我用x。
    【解决方案2】:

    使用此查询首先按非空值排序(在添加日期之后):

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

    【讨论】:

      猜你喜欢
      • 2012-10-19
      • 2010-10-05
      • 1970-01-01
      • 2015-12-27
      • 2012-02-05
      • 2023-03-22
      相关资源
      最近更新 更多