2016-05-23 5 views
0

私はこの項目テーブルを持っています。mysqlで2つの列をソートする方法

SELECT * FROMアイテムの注文はorderです。

返されるデータの:

| 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 

私がすることによって順番にこだわっています。たぶん誰かがこれで私を助けることができます。私はmysqlの基本的なフィルタを知りません。

新しい追加項目は、古い場合は最下部に移動する必要があります。

+0

有効期限が切れているかどうかを確認する条件は何ですか? – PseudoAj

+0

@pseudoAJ現在の日付。しかし、私は新しい列 'isNew'を持っていて大丈夫ですか?新しい= 1ならば0? – aldrin27

+0

あなたは何をしたいですか?注文?結果をフィルタリングしますか?正確にどの基準?何を試しましたか? – Arcesilas

答えて

2

私はあなたが望むものを理解していれば、あなたはこの試みることがあります。

SELECT * FROM items ORDER BY (date_ordered < now()), `order`; 

すると「比較によって順序を」、結果は2つの中で「を分割」です。次に、あなたが選んだ基準で注文することができます。しかし、比較は最初の基準でなければなりません。

+0

Omg。それは働く。助けてくれてありがとう。私はちょうど 'ORDER BY 'オーダー' ASC、 'date_ordered' DESC'でした – aldrin27

+1

ええ、'順序(比較) 'は直感的ではありません... – Arcesilas

1

@ Arcesilasの回答は間違いありませんが、新規注文の場合はnow()より前です。

SQL Fiddle

の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') 
; 

クエリ1

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 

Results

| 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 | 
関連する問題