使用 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.TYPE
是ENUM
,所以我必须使用二阶字段来修复排序
但现在我添加了第二个字段,当我使用 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
当我回显 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.TYPE
是ENUM
,所以我必须使用二阶字段来修复排序
但现在我添加了第二个字段,当我使用 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