带有';喜欢';Zend DB中的子句


Order clause with 'like' clause in Zend DB

查询:

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

这个查询在MySql中运行良好,但我无法使用Zend DB构建查询。我在执行时出错。

PHP数据库代码:

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

错误:

找不到列:1054"order clause"中类似"C%"的未知列"名称">

提前感谢

Zend_Db_Select试图将字符串分隔为列名,但如果您传递类型为Zend_Db_Expr的对象而不是字符串,则会跳过此操作:

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

还有一个未记录的快捷方式:列分隔函数假设任何包含括号的字符串都很可能是表达式,而不仅仅是列名。因此,以下方法也适用:

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

我不熟悉zend,但试着像这个一样在zend中重写您的sql查询

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

虽然我不太确定,但我想Zend代码一定是这样的,

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