2012-11-19 25 views
2

我試圖做一個選擇這樣的選擇:ZF2 - 與CONCAT

選擇c *,CONCAT(c.provider_id, '#',c.name「)FROM contact AS c

所以,我寫這樣的事情...

$sql = new Sql($this->adapter); 
     $query = $sql->select() 
     ->from(array('c' => 'contact')) 
     ->columns(array("CONCAT(c.provider_id,'#',c.name"), false) 

但是,結果是:

選擇c``CONCAT(c.provider_id,'#',c.name AS CONCAT(c.provider_id,'#',c.name FROM contact AS c

我到底做錯了什麼? 感謝您的幫助!

+0

是雙引號'「'在錯誤的地方? - > columns(array(「CONCAT(c.provider_id,'#',c.name」),false)''應該是 - )「,false)' – SERPRO

+0

查看'Zend \ Db \ Sql \ Expression'。我不在時間,但我想這可以讓你開始;) – Sam

+1

感謝您的回覆! SERPIO,你說得對,一個語法錯誤 @Sam,你說得對,男人!答案是 ' - > columns(array('*',new Expression(「CONCAT(c.provider_id,'#',c.name)作爲數據「)));' –

回答

2

如果您需要使用MySQL函數或其他任何您不希望自動轉義的函數,請查看Database Expressions。一些例子:

https://github.com/ralphschindler/Zend_Db-Examples

$sql = new Sql($this->adapter); 
$query = $sql->select() 
    ->from(array('c' => 'contact')) 
    ->columns(array(
     '*', new Expression("CONCAT(c.provider_id,'#',c.name) as data") 
    )) 
; 
2

當我不得不從表中提取的某些列,並添加一個SQL函數,我通常使用以下代碼:

$sql = new Sql($this->adapter); 
$query = $sql->select() 
    ->from(array('c' => 'contact')) 
    ->columns(array(
     'id', 'name', 'data' => new Expression('CONCAT(c.provider_id,'#',c.name)') 
    ) 
); 

ExpressionZend\Db\Sql\Expression一個實例,結果是:

SELECT `id`, `name`, CONCAT(c.provider_id,'#',c.name) AS `data` FROM `contact` AS `c`