2011-08-19 64 views
2

查詢:訂單條款「喜歡」子句中的Zend DB

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' 

在此先感謝

回答

6

Zend_Db_Select對象試圖分隔字符串作爲列名,但它跳過這樣做,如果你傳遞Zend_Db_Expr類型的對象而不是字符串:

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

還有一個未公開的快捷方式:列分隔函數假定任何包含括號的字符串很可能是表達式而不是列名稱。所以下面將工作太:

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

感謝很多:) –

2

我不熟悉與Zend但嘗試重寫你的SQL查詢中的Zend這樣

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(); 
+1

這將工作過,但你也將不得不作出LIKE表達Zend_Db_Expr,或者把它放在括號中。 –