订购mysql表中的项目,其中订单以特定[可变]列的值为条件

时间:2012-08-07 18:22:53

标签: mysql

假设示例:您有一个名为HOUSES的表,并且您希望按照上次更新的顺序显示每一行。
- 最近的最近,最近的最后一次 - 你也想首先以未售出的方式订购它们,并将所有售出的库存放在最后。

- 管理员还必须能够从未售出更改为已售出,并且将此项更改将项目拖放到底部并且另一个已售出。如果需要,可以手动更改特定房屋的显示顺序。

我该怎么做?这些是我必须使用的专栏:

  -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 个答案:

答案 0 :(得分: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值首先跟随最近 - 更改 - 第一个订单中的所有项目。