mysql表中的订单项,其中订单取决于特定[mutable]列的值

mysql表中的订单项,其中订单取决于特定[mutable]列的值,mysql,Mysql,假设示例:您有一个名为HOUSES的表,希望按上次更新的顺序显示每一行。 -最近的第一,最近的最后。 -您还需要先订购未售出的商品,然后再订购所有已售出的商品 -管理员还必须能够将“未售出”更改为“已售出”,并使该更改将一个项目与另一个已售出项目一起放在底部。如果需要,还可以手动更改特定房屋的显示顺序 我该怎么做?以下是我必须处理的专栏: -ID (which can be used to order them by date added i suppose), -PRICE (vals

假设示例:您有一个名为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) -ID(我想它可以用来按添加的日期订购), -价格(VAL为:未售出的价格或售出的“售出”价格) -显示顺序(具有真实显示顺序的整数字段) 请尝试以下操作:

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\u ORDER
值(如果已设置),否则将使用
-ID
(以获取“按降序创建的日期”实现)。

外部查询将首先选择所有字段并按
sortOrder
排序(将所有未售出的商品放在顶部,出售在底部),然后根据它们的
customOrder
值对两半进行排序(
DISP\u order
值先排序,然后是最近的第一次变更订单中的所有商品).

仅供参考:我不会将价格存储为某种字符/字符串表示形式。我将创建一个额外的位字段,称为“sell”,如果它选中了,则它将在市场上出售。使用price表示要价(十进制值)。不幸的是,我无法更改这些列,它们已经由以前的程序员放在那里了。我不想制造混乱并改变它们。公平的说……那肯定会阻碍发展。你有
last\u update
专栏吗?因为
id
对于插入的
date\u
可能(不准确但)足够公平,但是当一行被更新时,
id
不会改变。