ZF2 Zend \ Db \ Sql聚合函数作为WHERE中的键

时间:2013-09-24 10:49:10

标签: php sql zend-framework2 aggregate-functions

我找到了Zend \ Db \ Sql 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));

...不是解决办法,因为它会抛出错误。

我知道:还有一个表格列(月份)可以作为我的解决方案......但这还不够好。

如何在Zend \ Db \ Sql \ Select() - > where()中使用SQL聚合函数作为键?

1 个答案:

答案 0 :(得分:1)

不知道答案有多好,因为我没有测试过。但是,其中一个谓词类是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可能是更好的方法。