Mysql复杂的顺序

时间:2011-08-27 14:54:58

标签: php mysql sql

我的表格中有3列

  1. 状态枚举('已完成','未完成','正在进行中')
  2. 严重性枚举('高','低','中等')
  3. 已创建日期时间
  4. 现在我正按severity ASC created DESC status DESC订购。这是行不通的。这就是我希望它被列出的方式。

    1. 不完整 - 高
    2. 不完整 - 温和
    3. 不完整 - 低
    4. 进行中 - 高
    5. 进行中 - 温和
    6. 进行中 - 低
    7. 已完成 - 高
    8. 已完成 - 适度
    9. 已完成 - 低

3 个答案:

答案 0 :(得分:5)

您可以使用case订购这样的行:

select  *
from    YourTable
order by
        case 
        when status = 'Incomplete' and severity = 'High' then 1
        when status = 'Incomplete' and severity = 'Moderate' then 2
        ...
        end

答案 1 :(得分:4)

与Andomar的解决方案一样,我会考虑使用适当的状态和严重性表。不是枚举。

你可以暗示从这些表的键中排序顺序,但我可能有一个“SortOrder”列供将来使用。然后你可以通过SortOrder加入表和订单。

无需在每个需要它的查询中重复CASE

编辑:简化Andomar的想法......

order by
    case status
       when 'Incomplete' then 1
       when 'In Progress' then 2
       when 'Completed' then 3
    END,
    case severity
       when 'High' then 1
       when 'Moderate' then 2
       when 'Low' then 3
    END

答案 2 :(得分:0)

您可以将状态和严重性存储为数字, 使用:

SELECT ... FROM ... ... ORDER BY STATUS [ASC/DESC], SEVERITY [ASC/DESC]

ASC或DESC取决于您选择的数字。

要将严重性和状态设置为文本,如果需要更多状态/严重性,可以使用IF / Switch或INNER JOIN