使用 Zend Framework 1.6.2 添加二阶字段时出现不明确错误

Ambiguous error occured when I add a second order field using Zend Framework 1.6.2

当我回显 sql 使用 echo $select->__toString():

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`.`IsActive`,
       `a`.`LastChangeDate`
FROM `ProCatCountry` AS `a`
INNER JOIN `ProCat` AS `b` ON a.CategoryID = b.CategoryID
ORDER BY FIELD(a.TYPE, 'Normal', 'Special', 'Structured'),TYPE ASC 
LIMIT 25

我作为第二个字段排序的是在if子句中计算的TYPE字段。我添加这个是因为不使用二阶字段会出现排序问题,因为字段a.TYPEENUM,所以我必须使用二阶字段来修复排序

但现在我添加了第二个字段,当我使用 sql 客户端(如 sqlyog)时,我运行成功且很好,但是当我使用 return $this->_myAdapter->fetchAll($select); 执行 sql, 出现 TYPE is ambiguous 错误。我认为问题出在 Zend Framework fetchAll() 方法上,但我该如何解决它?

您不能将 TYPE 用作 ORDER BY 参数,因为它只是 IF 语句的一个 ALIAS。如果 TYPE 在子查询中,您可以将其作为 ORDER BY 参数。请参阅下面的示例:

 SELECT * FROM(
    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`.`IsActive`,
           `a`.`LastChangeDate`
    FROM `ProCatCountry` AS `a`
    INNER JOIN `ProCat` AS `b` ON a.CategoryID = b.CategoryID
    ORDER BY FIELD(a.TYPE, 'Normal', 'Special', 'Structured') ASC 
    LIMIT 25) AS A ORDER BY TYPE ASC