如何在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下单