在mysql表中订购商品的订单取决于特定[mutable]列的值

问题描述:

假设示例:您有一个名为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

尝试以下操作:

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值首先,随后所有项目按最近更改的顺序排列)。