2012-09-21 39 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,我已经发现了轻微的性能提升。