2013-09-24 62 views
1

我发现Zend的\ DB \ sql SQL函数聚合函数的一些解决方案的关键,但他们不是为我工作:(ZF2 Zend的 DB SQL聚合函数如在

我的老PDO声明(作品有“简单的” PDO):

SELECT DISTINCT DATE_FORMAT(date, '%e') FROM termine WHERE MONTH(date) = ? 

解决方案的第一个聚合函数:

$select->columns(array(new Expression("DISTINCT DATE_FORMAT(date, '%e')"))); 

但对于第二聚合函数我不知道,并不能找到任何

$select->where(array('MONTH(date)' => $month)); 

...没有解决方案,因为它会引发错误。

我知道:还有一个表列(月)可以是我的解决方案......但它不够好。我如何使用SQL聚合函数作为Zend \ Db \ Sql \ Select() - > where()中的键?

+1

可能的重复[如何在ZF2的列名称前添加Sql \ Expression?](http://stackoverflow.com/questions/14190872/how-to-add-sql-expression-in-front-of -column-name-in-zf2) – akond

回答

1

不知道这个答案有多好,因为我没有测试过它。但是,其中一个Predicate类是Expression。我相信,我应该做你想要的。然后,您可以将Predicate传递给where方法(它需要数组,PredicateSets,Predicates和Where类)。

还有可能使Month()成为列并使用having子句。例如:

$select->columns(array(
    new Expression("DISTINCT DATE_FORMAT(date, '%e')"), 
    'month' => new Expression("MONTH(date)"), 
) 
)->having(array('month' => $month)); 

这我知道的作品,因为我在几个查询中使用它。但是,使用Expression prediate可能是更好的方法。

+1

太棒了...它的工作原理! – allapow