【问题标题】:ORDER BY “ENUM field” with an calculated field in MYSQLORDER BY “ENUM field” 与 MYSQL 中的计算字段
【发布时间】:2026-01-23 03:25:01
【问题描述】:

我的情况比order-by-enum-field-in-mysql复杂一点

我的 SQL 是:

SELECT `a`.`ChannelID`,
  `a`.`CategoryID`,
  `a`.`Country`,
  `a`.`LocalName`,
  if((`a`.`Type` = 'FreeText'
      AND a.IsHybrid = 'YES'), 'Hybrid', 
      if(`a`.`Type` = 'FreeText'
        AND a.IsHybrid = 'NO', 'FreeText', a.Type)) AS TYPE,
  `a`.`IsHybrid`
FROM `ProCatCountry` AS `a`
  INNER JOIN `ProCat` AS `b` ON a.CategoryID = b.CategoryID
ORDER BY FIELD(a.TYPE, 'FreeText', 'Hybrid', 'Structured') ASC 

但是顺序不正确,首先出现FreeText记录然后Hybrid然后FreeText再次出现。

字段TYPE是枚举,我想按这个字段排序,同时,一个不包含在枚举列表中的值——计算出来的名为Hybrid的值也应该正确排序。这种情况我该怎么办?

原来有一个TYPE字段不明确的错误,感谢@Jens,改成a.TYPE后,这个不明确的错误得到了解决。

【问题讨论】:

  • 两个表中都有type 列吗?
  • @juergend 是的,我在ProCat 表中也有TYPE 字段

标签: mysql enums


【解决方案1】:

您必须在order by 语句中添加表别名:

ORDER BY FIELD(a.TYPE, 'FreeText', 'Hybrid', 'Structured') ASC 

因为它是两个表的列。

【讨论】:

  • 你好,我添加到a.TYPE后,这个模糊的错误消失了,但是出现了新的问题,我已经修改了我的问题,请看一下,谢谢!
  • @Phenix 退出问题不是一个好主意。您应该更新您的问题,让社区看到问题已更改。所以最好让原始问题可见并添加检查UPDATE
  • 哦,抱歉,我该如何更新问题?我刚刚编辑了它。
  • @Phoenix 你误会我了。您应该使用编辑功能。但是您不应该覆盖原始信息。您在原始问题之后大喊添加更新。
  • 现在我明白了,好的!我这里做了一个sqlfiddle:sqlfiddle.com/#!2/02a423/1,请看