2012-09-21 64 views
3

我試圖訂購一個返回集,但我很難得到它正確地訂購。SQL棘手的訂單通過

我正在選擇字段,每個字段都有一個date_updated和一個date_added。 添加字段時,date_updated爲空,直到有更新,然後分配當前日期。

我需要通過讓最近的條目位於底部,而最上面的條目是最早的條目來排列我的列表。所以如果一個項目被添加,它應該直接到底部。有沒有辦法將所有的日期字段連接在一起,然後按照最舊到最新排序,無視更新或添加?

這可能聽起來有點令人困惑,但我已經嘗試了ORDER BY date_added DESC, date_updated ASC和類似的東西的許多組合,但它沒有做我需要它做的事情。我得到date_added,然後根據該是date_updated一個單獨的順序進行排序頂部...

任何投入將是這裏真正的幫助......

+0

我使用的是phpmyadmin – patricko

回答

4

嘗試

order by coalesce(date_updated, date_added) 

COALESCE DOC

0

使用CASEOrder By條款。

ORDER BY CASE WHEN date_updated IS NULL 
       THEN 0 
       ELSE 1 
      END DESC, date_added DESC 
0
Order by IsNull(DateUpdated,DateAdded) 

將是單向的

1

你可以嘗試CASE聲明

SELECT 
    firstname, 
    lastname, 
    date_added, 
    date_updated, 
    CASE date_updated IS NULL 
     THEN date_added 
     ELSE date_updated 
    END CASE AS order_date 
FROM mytable 
ORDER BY order_date DESC 

它會檢查date_updated是否爲空,然後在新列中輸入值date_added。如果沒有,它會把date_updated。新列被稱爲order_date並用於分類。

您也可以在ORDER BY子句中添加CASE語句,但這可能會降低您的查詢速度,因爲它必須在構建數據時對索引進行連接。雖然沒有定論,但如果在SELECT和ORDER BY中使用CASE,我已經發現了輕微的性能提升。