ZF2 ZendDbSql 聚合函数作为 WHERE 中的键


ZF2 ZendDbSql aggregate function as key in WHERE

我为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 聚合函数作为键?

不知道这有多好的答案,因为我还没有测试过它。但是,谓词类之一是表达式。我相信,这应该做你想要的。然后,您可以将谓词传递给 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));

我知道这是有效的,因为我在几个查询中使用它。但是,使用表达式预处理可能是更好的方法。