我找到了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聚合函数作为键?
答案 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可能是更好的方法。