2014-11-25 83 views
0

我正在寫一個複雜的搜索算法,在層中進行搜索。對於兩個層次,我需要非常奇怪的訂單子句,Zend的SQL構建器根本無法處理這些子句。有沒有辦法告訴Zend只需在order by子句中添加一個字符串,而不用試圖解釋和破壞它?我可以將字符串傳遞給Zend sql的order函數嗎?

到那些想知道,我的順序的一個例子是

IF(Name LIKE '1234 %' OR Name LIKE '% 1234 %' OR Name LIKE '% 1234' OR Code LIKE '1234 %' OR Code LIKE '% 1234 %' OR Code LIKE '% 1234', 1, 0) + IF(Name LIKE 'ASF %' OR Name LIKE '% ASF %' OR Name LIKE '% ASF' OR Code LIKE 'ASF %' OR Code LIKE '% ASF %' OR Code LIKE '% ASF', 1, 0)

它基本上會將搜索串的電流記錄包含和訂單由單詞數。

我想要做這樣的事情

$sql = new Sql($this->adapter); 
$select = $sql->select(); 
$select->from('Table'); 
$select->where($where); 
$select->order($orderString); 

回答

0

如果order by條款的參數是一個普通字符串,所以它會被認爲 只是一個列名(後跟或不「ASC」或「DESC」)。

可能的解決方案是使用Expression類。這樣的事情:

$select->order(array(new \Zend\Db\Sql\Expression($orderString))); 

希望這會有所幫助。

相關問題