如何在mysql中对两列进行排序

如何在mysql中对两列进行排序,mysql,Mysql,我有这张桌子 按订单从项目订单中选择* 返回的数据: | itemID | order | description | date_ordered | | 1 | 1 | Apple | 2016-05-26 08:00:00 | | 2 | 1 | Banana | 2016-05-22 10:00:00 | | 3 | 2 | Cocoa | 20

我有这张桌子

按订单从项目订单中选择*

返回的数据:

| itemID  |   order  | description |    date_ordered       |
|   1     |    1     |   Apple     |  2016-05-26 08:00:00  |
|   2     |    1     |   Banana    |  2016-05-22 10:00:00  |
|   3     |    2     |   Cocoa     |  2016-05-29 08:00:00  |
|   4     |    3     |   Lychee    |  2016-05-30 12:00:00  |
| itemID  |   order  | description |    date_ordered       |
|   1     |    1     |   Apple     |  2016-05-26 08:00:00  |
|   3     |    2     |   Cocoa     |  2016-05-29 08:00:00  |
|   4     |    3     |   Lychee    |  2016-05-30 12:00:00  |
|   2     |    1     |   Banana    |  2016-05-22 10:00:00  | <-- This is expired
预期输出:

| itemID  |   order  | description |    date_ordered       |
|   1     |    1     |   Apple     |  2016-05-26 08:00:00  |
|   2     |    1     |   Banana    |  2016-05-22 10:00:00  |
|   3     |    2     |   Cocoa     |  2016-05-29 08:00:00  |
|   4     |    3     |   Lychee    |  2016-05-30 12:00:00  |
| itemID  |   order  | description |    date_ordered       |
|   1     |    1     |   Apple     |  2016-05-26 08:00:00  |
|   3     |    2     |   Cocoa     |  2016-05-29 08:00:00  |
|   4     |    3     |   Lychee    |  2016-05-30 12:00:00  |
|   2     |    1     |   Banana    |  2016-05-22 10:00:00  | <-- This is expired
| itemID |订单|描述|日期|订单|
|苹果公司2016-05-26 08:00:00|
|可可粉2016-05-29 08:00:00|
|荔枝2016-05-30 12:00:00|

|2 | 1 | Banana | 2016-05-22 10:00:00 |如果我明白你想要什么,你可以试试这个:

SELECT * FROM items ORDER BY (date_ordered < now()), `order`;
SELECT*从项目订购日期(date_ordered

当“通过比较排序”时,结果是“一分为二”。然后,您可以根据自己选择的标准进行订购。但是,比较必须是第一个标准。

如果我理解您的要求,您可以尝试以下方法:

SELECT * FROM items ORDER BY (date_ordered < now()), `order`;
SELECT*从项目订购日期(date_ordered

当“通过比较排序”时,结果是“一分为二”。然后,您可以根据自己选择的标准进行订购。不过,比较必须是第一个标准。

@Arcesilas的答案肯定是正确的,但如果新订单在
now()之前,以防万一

MySQL 5.6架构

CREATE TABLE items
    (`itemID` int, `order` int, `description` varchar(6), `date_ordered` datetime)
;

INSERT INTO items
    (`itemID`, `order`, `description`, `date_ordered`)
VALUES
    (1, 1, 'Apple', '2016-05-26 08:00:00'),
    (2, 1, 'Banana', '2016-05-22 10:00:00'),
    (3, 2, 'Cocoa', '2016-05-29 08:00:00'),
    (4, 3, 'Lychee', '2016-05-30 12:00:00')
;
SELECT items.*
FROM (SELECT * FROM items ORDER BY items.`order`) items
JOIN (
  SELECT `order`, max(date_ordered) AS date_ordered FROM items GROUP BY `order`
) a ON a.`order` = items.`order` AND  a.date_ordered = items.date_ordered
UNION
SELECT items.*
FROM (SELECT * FROM items ORDER BY items.`order`) items
JOIN (
  SELECT `order`, max(date_ordered) AS date_ordered FROM items GROUP BY `order`
) a ON a.`order` = items.`order` AND  a.date_ordered <> items.date_ordered
| itemID | order | description |          date_ordered |
|--------|-------|-------------|-----------------------|
|      1 |     1 |       Apple | May, 26 2016 08:00:00 |
|      3 |     2 |       Cocoa | May, 29 2016 08:00:00 |
|      4 |     3 |      Lychee | May, 30 2016 12:00:00 |
|      2 |     1 |      Banana | May, 22 2016 10:00:00 |
查询1

CREATE TABLE items
    (`itemID` int, `order` int, `description` varchar(6), `date_ordered` datetime)
;

INSERT INTO items
    (`itemID`, `order`, `description`, `date_ordered`)
VALUES
    (1, 1, 'Apple', '2016-05-26 08:00:00'),
    (2, 1, 'Banana', '2016-05-22 10:00:00'),
    (3, 2, 'Cocoa', '2016-05-29 08:00:00'),
    (4, 3, 'Lychee', '2016-05-30 12:00:00')
;
SELECT items.*
FROM (SELECT * FROM items ORDER BY items.`order`) items
JOIN (
  SELECT `order`, max(date_ordered) AS date_ordered FROM items GROUP BY `order`
) a ON a.`order` = items.`order` AND  a.date_ordered = items.date_ordered
UNION
SELECT items.*
FROM (SELECT * FROM items ORDER BY items.`order`) items
JOIN (
  SELECT `order`, max(date_ordered) AS date_ordered FROM items GROUP BY `order`
) a ON a.`order` = items.`order` AND  a.date_ordered <> items.date_ordered
| itemID | order | description |          date_ordered |
|--------|-------|-------------|-----------------------|
|      1 |     1 |       Apple | May, 26 2016 08:00:00 |
|      3 |     2 |       Cocoa | May, 29 2016 08:00:00 |
|      4 |     3 |      Lychee | May, 30 2016 12:00:00 |
|      2 |     1 |      Banana | May, 22 2016 10:00:00 |

@Arcesilas的回答肯定是正确的,但如果新订单是在
now()之前(
),以防万一

MySQL 5.6架构

CREATE TABLE items
    (`itemID` int, `order` int, `description` varchar(6), `date_ordered` datetime)
;

INSERT INTO items
    (`itemID`, `order`, `description`, `date_ordered`)
VALUES
    (1, 1, 'Apple', '2016-05-26 08:00:00'),
    (2, 1, 'Banana', '2016-05-22 10:00:00'),
    (3, 2, 'Cocoa', '2016-05-29 08:00:00'),
    (4, 3, 'Lychee', '2016-05-30 12:00:00')
;
SELECT items.*
FROM (SELECT * FROM items ORDER BY items.`order`) items
JOIN (
  SELECT `order`, max(date_ordered) AS date_ordered FROM items GROUP BY `order`
) a ON a.`order` = items.`order` AND  a.date_ordered = items.date_ordered
UNION
SELECT items.*
FROM (SELECT * FROM items ORDER BY items.`order`) items
JOIN (
  SELECT `order`, max(date_ordered) AS date_ordered FROM items GROUP BY `order`
) a ON a.`order` = items.`order` AND  a.date_ordered <> items.date_ordered
| itemID | order | description |          date_ordered |
|--------|-------|-------------|-----------------------|
|      1 |     1 |       Apple | May, 26 2016 08:00:00 |
|      3 |     2 |       Cocoa | May, 29 2016 08:00:00 |
|      4 |     3 |      Lychee | May, 30 2016 12:00:00 |
|      2 |     1 |      Banana | May, 22 2016 10:00:00 |
查询1

CREATE TABLE items
    (`itemID` int, `order` int, `description` varchar(6), `date_ordered` datetime)
;

INSERT INTO items
    (`itemID`, `order`, `description`, `date_ordered`)
VALUES
    (1, 1, 'Apple', '2016-05-26 08:00:00'),
    (2, 1, 'Banana', '2016-05-22 10:00:00'),
    (3, 2, 'Cocoa', '2016-05-29 08:00:00'),
    (4, 3, 'Lychee', '2016-05-30 12:00:00')
;
SELECT items.*
FROM (SELECT * FROM items ORDER BY items.`order`) items
JOIN (
  SELECT `order`, max(date_ordered) AS date_ordered FROM items GROUP BY `order`
) a ON a.`order` = items.`order` AND  a.date_ordered = items.date_ordered
UNION
SELECT items.*
FROM (SELECT * FROM items ORDER BY items.`order`) items
JOIN (
  SELECT `order`, max(date_ordered) AS date_ordered FROM items GROUP BY `order`
) a ON a.`order` = items.`order` AND  a.date_ordered <> items.date_ordered
| itemID | order | description |          date_ordered |
|--------|-------|-------------|-----------------------|
|      1 |     1 |       Apple | May, 26 2016 08:00:00 |
|      3 |     2 |       Cocoa | May, 29 2016 08:00:00 |
|      4 |     3 |      Lychee | May, 30 2016 12:00:00 |
|      2 |     1 |      Banana | May, 22 2016 10:00:00 |

检查是否过期的条件是什么?@pseudoAJ当前日期。但是我想有一个新的专栏可以吗?如果new=1,否则为0?您到底想做什么?点菜?过滤结果?确切的标准是什么?你试过什么?顺便说一句,用保留字来命名一个专栏几乎不是一个好主意。我提到了,因为我认为你做得不对。但这真的不容易猜测,因为你没有提供很多关于你真正想要做什么和需要什么的细节……检查它是否过期的条件是什么?@pseudoAJ当前日期。但是我想有一个新的专栏可以吗?如果new=1,否则为0?您到底想做什么?点菜?过滤结果?确切的标准是什么?你试过什么?顺便说一句,用保留字来命名一个专栏几乎不是一个好主意。我提到了,因为我认为你做得不对。但这真的不容易猜测,因为你没有提供很多关于你真正想做什么和需要什么的细节…天哪。它起作用了。非常感谢你的帮助。早些时候,我只是按“订单”ASC和“订单日期”描述进行了
订购。它起作用了。非常感谢你的帮助。早些时候,我只是按“订单”ASC、“订单日期”DESC下单