我为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));
我知道这是有效的,因为我在几个查询中使用它。但是,使用表达式预处理可能是更好的方法。