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

标签 php mysql sql zend-framework

当我使用 echo $select->__toString() 回显 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`.`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,所以我必须使用第二个来修复排序订单字段。

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

最佳答案

您不能使用 TYPE作为ORDER BY参数,因为它只是一个 ALIAS你的IF陈述。你可以制作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

关于php - 使用 Zend Framework 1.6.2 添加二阶字段时出现不明确错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28423089/

相关文章:

php - 在php站点上缓存大量页面

MYSQL:仅当用户是唯一时才计算类别实例

java - 如何将SQL排序规则设置映射到Java比较器?

php - Mysql 两张表,从一张表中选取所有值,比较是否存在,然后返回一个随机值

php - 为什么我的代码没有从我的数据库中发布数据?

php - phpMyAdmin 中缺少设置图标和注销

mysql - MySQL数据库中的历史字段

php - 在 PHP 中卸载动态类

php - WordPress 手册根据 postmeta 列值选择 MySQL

mysql - 仅当值不存在时返回行