在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)
答
尝试以下操作:
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
值首先,随后所有项目按最近更改的顺序排列)。
仅供参考:我不会将价格存储为某种字符/字符串表示形式。如果它被检查出售,我会创建一个名为“已售出”的额外位字段,否则它会在市场上出售。使用价格是什么要价(十进制值)。 – JonH 2012-08-07 18:24:59
不幸的是,我不能改变这些列,他们已经在那里的前一位程序员把他们放在那里。我不想创造一团糟并改变它们。 – 2012-08-07 18:30:32
够公平的......这将肯定会咬人的道路。 – JonH 2012-08-07 18:31:23