2012-11-19 24 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`