【问题标题】:MySQL ORDER BY [custom SET field value]MySQL ORDER BY [自定义 SET 字段值]
【发布时间】:2010-10-26 16:21:34
【问题描述】:

我希望有一个简单的解决方案:

我有一个表格,其中每一行都有自己的状态(SET 类型字段)。状态可以是:

  • 离线
  • 可用
  • 距离

我想订购如下

  • 可用
  • 距离
  • 离线

我想的很简单

ORDER BY `status` ASC

可以解决问题(按字母顺序),但它给了我以下信息:

  • 离线
  • 可用
  • 距离

如何以最简单的方式解决这个问题?

提前致谢,

面料

【问题讨论】:

  • 为什么要近距离投票? (原因也不适用)
  • 别忘了接受正确答案@fabrik ;)

标签: mysql sql-order-by


【解决方案1】:
SELECT * FROM table ORDER BY FIELD(status,'offline','available','busy','distance')

Mysql order by specific ID values

【讨论】:

    【解决方案2】:

    我想添加另一种按自定义字段值排序的方式,

    ORDER BY FIND_IN_SET(status, 'available,busy,distance,offline')
    

    (如果给定的字符串包含引号,只需将其转义)

    【讨论】:

      【解决方案3】:

      如果重新排序 SET 值不切实际,您也可以这样做:

      ... ORDER BY CASE `status` 
                      WHEN 'available' THEN 1
                      WHEN 'busy' THEN 2
                      WHEN 'distance' THEN 3
                      WHEN 'offline' THEN 4
                   END
      

      【讨论】:

      • 这是我能想到的最简单的方法。另一种选择是创建一个包含您的状态的表,该表具有一个订单列并内部连接该表,并按每个状态指定的顺序对行进行排序。
      【解决方案4】:

      比上面的解决方案更简单:

      ORDER BY CONCAT(status)
      

      【讨论】:

        【解决方案5】:

        没关系。

        诀窍是以正确的顺序保存SET 值。

        【讨论】:

        • 我不同意:受控的插入顺序不能成为解决方案。查询不能依赖于行在表中的顺序,因为它们可以因任何原因随时更改。 ORDER BY 是要走的路,毕竟这是它的工作。我宁愿找到一种方法来使用order by 子句来实现它,然后来增强软件的一致性。
        • @TechNyquist 如您所见,我接受了一个依赖于ORDER BY 的答案。我只是把这个评论留在这里作为一个坏例子。顺便说一句,谢谢您的意见;)
        • 欢迎您。我的意思是这个评论只是为了指出这不是首选方式,以防一些新手阅读这篇文章。 "Please, don't try this at home".
        猜你喜欢
        • 2019-04-23
        • 2014-12-29
        • 2014-01-17
        • 1970-01-01
        • 2021-12-06
        • 2019-10-29
        • 2023-04-07
        • 2011-05-04
        • 1970-01-01
        相关资源
        最近更新 更多