Zend DB中带有'like'子句的Order子句

时间:2011-08-19 06:44:57

标签: php zend-framework mysql-error-1054

查询:

select * from table_name ORDER BY name like 'C%' DESC;

此查询在MySql中正常工作,但我无法使用Zend DB构建查询。 我在执行时遇到错误。

PHP DB代码:

$result = $this->getDefaultAdapter() ->select() ->from($this->_name,array('*')) ->order("name like 'C%' DESC") ->query() ->fetchAll();

错误:

Column not found: 1054 Unknown column 'name like 'C%'' in 'order clause' 

提前致谢

2 个答案:

答案 0 :(得分:6)

Zend_Db_Select尝试将字符串分隔为列名,但如果传递Zend_Db_Expr类型的对象而不是字符串,它会跳过这样做:

->order(new Zend_Db_Expr("name like 'C%' DESC"))->

还有一个未记录的快捷方式:列分隔函数假定包含括号的任何字符串很可能是表达式而不仅仅是列名。所以以下内容也会起作用:

->order( "(name like 'C%' DESC)" )->

答案 1 :(得分:2)

我不熟悉zend但是尝试在Zend中重写你的sql查询,就像这样

select *, (`name` like 'C%') as theFiled from  table_name by theFiled desc;

虽然我不太确定我认为Zend Code必须是这样的,

 $result = $this->getDefaultAdapter() ->select() 
->from($this->_name,array('*', "theFiled" => "name like 'C%'") ->order("theFiled DESC") 
->query() ->fetchAll();