【发布时间】:2013-09-10 13:47:14
【问题描述】:
我正在运行这段代码
$sq = $this->_codes->getAdapter()->select()
->from (array('cs' => 'code_statuses'), array('total' => 'count(*)'))
->join (
array ('c' => 'codes'), 'c.code_id = cs.code_id',
array ('human_state' => new Zend_Db_Expr("CASE c.state_id WHEN 3 THEN 'active' WHEN 5 THEN 'suspended' ELSE 'inactive' END"), 'c.*')
)
->group('cs.code_id');
$sqtemp = $this->_codes->getAdapter()->select()
->from (array('cs' => 'code_statuses'), array('total' => 'count(*)'))
->join (
array ('c' => 'codes'), 'c.code_id = cs.code_id',
array ('human_state' => new Zend_Db_Expr("CASE c.state_id WHEN 3 THEN 'active' WHEN 5 THEN 'suspended' ELSE 'inactive' END"), 'c.*')
)
->group('cs.code_id');
if (!empty($options['state_id'])):
if (is_array($options['state_id'])):
$states = 'cs.state_id=' . implode(' OR cs.state_id=', $options['state_id']);
$sq->where($states)
->having(total<=4);
$sqtemp->where ('cs.state_id=5')
->having(total<4);
else:
$sq->where ('cs.state_id=?', $options['state_id']);
endif;
当我尝试使用联合时出现问题
$sqfinal=$this->_codes->getAdapter()->select()
->union(array($sq,$sqtemp))
->order('cs.code_id');
但单独 $sq 和 $sqtemp 工作正常
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'cs.code_id' in 'order clause'
不知道哪里出错了
任何帮助将不胜感激
*编辑
SELECT count(*) AS `total`,
CASE c.state_id
WHEN 3 THEN 'active'
WHEN 5 THEN 'suspended'
ELSE 'inactive'
END AS `human_state`, `c`.*
FROM `code_statuses` AS `cs`
INNER JOIN `codes` AS `c`
ON c.code_id = cs.code_id
WHERE (cs.state_id=1 OR cs.state_id=2 OR cs.state_id=4)
GROUP BY `cs`.`code_id` HAVING (total<=4)
UNION
SELECT count(*) AS `total`,
CASE c.state_id
WHEN 3 THEN 'active'
WHEN 5 THEN 'suspended'
ELSE 'inactive'
END AS `human_state`, `c`.*
FROM `code_statuses` AS `cs`
INNER JOIN `codes` AS `c`
ON c.code_id = cs.code_id
WHERE (cs.state_id=5)
GROUP BY `cs`.`code_id`
HAVING (total<4)
union 之前的部分是 $sq,之后的部分是 $sqtemp,两者的组合给出了上面的打印输出 他们两个都与 union in 是一回事
【问题讨论】:
-
您使用的是哪个版本的 ZendFW?
(string) $sq和(string) $sqtemp的输出分别是什么?(string) <your union stmt的输出是什么,最后:尝试传递Zend_Db::SQL_UNION_ALL常量,如果您使用的是 Zf1,我怀疑您正在使用 -
zend 版本是 1.12.31 有关 $sq 和 $sqtemp 的编辑见上文
-
Union all 给了我同样的错误 $sq=$this->_codes->getAdapter()->select() ->union(array( $sq, $sqtemp ),Zend_Db_Select::SQL_UNION_ALL ) ->order('cs.code_id'); SQLSTATE [42S22]:未找到列:1054 'order 子句'中的未知列 'c.code'
-
只需将查询复制粘贴到mysql中(workbench,或者你有的其他工具,甚至cli都可以),然后分解,发现语法错误。我不是免费的调试器(我和其他人一样讨厌调试,但我们都必须这样做)
-
原始 SQL 在 mysql 中运行良好,所以我怀疑它与 zend 框架有关
标签: php sql zend-framework zend-db