2013-09-24 26 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