2012-08-07 49 views
1

假設示例:您有一個名爲HOUSES的表,並且您希望按照最後一次更新的順序顯示每一行。
- 最近的第一個,最近的最後一個。
- 你也想訂購他們的未售出的第一個,所有出售的股票最後。在mysql表中訂購商品的訂單取決於特定[mutable]列的值

- 管理員還必須能夠從未售出到已售出的產品進行更改,並且該更改會將一個項目降到最低,另一個售出。如果需要,可以手動更改特定房屋的顯示順序。

我該怎麼做?這是我與工作中的列:

 
    -ID (which can be used to order them by date added i suppose), 
    -PRICE (vals are: the price if unsold or "SOLD" if sold) 
    -DISP_ORDER (an integer field with the true display order) 
+1

僅供參考:我不會將價格存儲爲某種字符/字符串表示形式。如果它被檢查出售,我會創建一個名爲「已售出」的額外位字段,否則它會在市場上出售。使用價格是什麼要價(十進制值)。 – JonH 2012-08-07 18:24:59

+0

不幸的是,我不能改變這些列,他們已經在那裏的前一位程序員把他們放在那裏。我不想創造一團糟並改變它們。 – 2012-08-07 18:30:32

+0

夠公平的......這將肯定會咬人的道路。 – JonH 2012-08-07 18:31:23

回答

0

嘗試以下操作:

SELECT * FROM (
    SELECT 
     ID, PRICE, DISP_ORDER, 
     CASE WHEN PRICE = 'SOLD' THEN 1 ELSE 0 END AS soldOrder, 
     CASE WHEN DISP_ORDER > 0 THEN DISP_ORDER ELSE -ID END AS customOrder 
    FROM HOUSES 
) AS q 
ORDER BY 
    soldOrder, customOrder 

內查詢建立兩個自定義排序列。 soldOrder將使所有出售商品的價值爲1,所有非出售商品的價值爲0. customOrder列將使用DISP_ORDER值(如果已設置),否則將使用-ID(以獲得「以降序創建的日期」實現)。
外查詢將由sortOrder第一(將所有未售出的物品在頂部,底部出售),然後可以通過customOrder值排序每兩個半部的選擇所有字段和順序的(DISP_ORDER值首先,隨後所有項目按最近更改的順序排列)。